Active Directory (以下、AD) は、デフォルトでLDAP及びLDAPS (LDAP over SSL) による通信を行うことができる。以下は実際にADのサーバにて開放しているポートを確認した結果となり、LDAPの389番ポートとLDAPSの636番ポートが開放されていることがわかる。
PS C:\> Get-NetTCPConnection -State Listen | Where-Object { $_.LocalPort -match "^389|^636" }
LocalAddress LocalPort RemoteAddress RemotePort State AppliedSetting
------------ --------- ------------- ---------- ----- --------------
:: 636 :: 0 Listen
:: 389 :: 0 Listen
0.0.0.0 636 0.0.0.0 0 Listen
0.0.0.0 389 0.0.0.0 0 Listen
ただし、デフォルトの状態ではADではLDAPSは利用することができない。LDAPは利用できるが、セキュリティの観点からは通信が暗号化されるLDAPSの利用が強く推奨される。
今回は、Active Directoryに対してオレオレ証明書による証明書登録を行い、LDAPSの通信を利用できるよう構成するための手順を記載する。
環境
オレオレ証明書を作成するため、Linuxサーバのopenssl
コマンドを利用する。
- 証明書作成用Linux : CentOS 8.1
- AD : Windows Server 2016 Standard
証明書作成手順
1. Linuxサーバにて作業用ディレクトリの作成
Linuxサーバにログインし、以下の通り作業用ディレクトリを作成する。
# cd /etc/pki/tls/misc/
# mkdir ad_ldaps
# cd ad_ldaps/
上記作業用ディレクトリには、最終的に以下ファイルが配置される。登録対象に「●」を付けたファイルをADとLDAPクライアントにそれぞれ登録する。
ファイル名 | 登録対象 | 説明 |
---|---|---|
private_ad.key |
- | 署名用の秘密鍵 |
server.csr |
- | サーバ証明書作成用のCSR |
san.txt |
- | サーバ証明書に登録するSAN (サブジェクト代替名) |
public_ad.crt |
● | LDAPクライアントへ登録するためのサーバ証明書 |
private_ad.pfx |
● | ADへ登録するための秘密鍵を含むサーバ証明書 (pkcs12形式) |
2. Linuxサーバにて秘密鍵の作成
openssl
コマンドで、証明書作成に使用する秘密鍵を作成する。
# openssl genrsa 2048 > private_ad.key
Generating RSA private key, 2048 bit long modulus (2 primes)
........................................................+++++
.............................................+++++
e is 65537 (0x010001)
3. LinuxサーバにてCSRの作成
引き続きopenssl
コマンドを使用する。サーバ証明書作成をするため、CSR (証明書署名要求) を作成する。CSR作成には各種情報の入力を求められるため、以下のように設定を行う。
設定項目 | 設定値 |
---|---|
Country Name (2 letter code) [JP] | JP を設定 |
State or Province Name (full name) [Tokyo] | 適当に設定 |
Locality Name (eg, city) [Default City] | 適当に設定 |
Organization Name (eg, company) [Default Company Ltd] | 適当に設定 |
Organizational Unit Name (eg, section) [] | そのままエンター |
Common Name (eg, your name or your server’s hostname) | ADのFQDNを設定 |
Email Address [] | そのままエンター |
A challenge password [] | そのままエンター |
An optional company name [] | そのままエンター |
実際にCSR作成のコマンド実行結果を以下に記載する。
# openssl req -new -key private_ad.key > server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [JP]:JP
State or Province Name (full name) [Tokyo]:Tokyo
Locality Name (eg, city) [Default City]:Default City
Organization Name (eg, company) [Default Company Ltd]:Default Company Ltd
Organizational Unit Name (eg, section) []: ←★そのままエンター
Common Name (eg, your name or your server's hostname) []:hoge1.example.com ←★ADのFQDN
Email Address []: ←★そのままエンター
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: ←★そのままエンター
An optional company name []: ←★そのままエンター
4. Linuxサーバにてサーバ証明書の作成
CSRに秘密鍵で署名を行い、サーバ証明書を作成する。サーバ証明書にSAN (サブジェクト代替名) の情報が必須となるため、以下のようにADのFQDN情報を記載したテキストファイルを作成しておく。ADが複数ある場合は、カンマ区切りで複数のサーバのFQDNを設定することができ、1つの証明書で複数台のADに登録できる証明書を作成できる。
※Common Nameは複数のFQDNの記載はできないが、SANに記載があれば、きちんとLDAPSの認証は成功するようだ。
# cat san.txt
subjectAltName = DNS:hoge1.example.com, DNS:hoge2.example.com
openssl
コマンド実行時に-extfile san.txt
のオプションを付与して、SAN情報を含めた形でサーバ証明書を作成する。
# openssl x509 -days 3650 -req -signkey private_ad.key -in server.csr -out public_ad.crt -extfile san.txt
5. LinuxサーバにてAD登録用のpkcs12形式の証明書を作成
ADに登録するサーバ証明書は、証明書と秘密鍵をセットにしたpkcs12形式の証明書とする必要がある。秘密鍵情報を含むことから、作成時にパスワード設定を設定する。
# openssl pkcs12 -export -inkey private_ad.key -in public_ad.crt -out private_ad.pfx
Enter Export Password: ←★パスワードを入力
Verifying - Enter Export Password: ←★パスワードを再入力
最後に以下の証明書ファイルをダウンロードする。private_ad.pfx
には秘密鍵が含まれるため、取り扱いには注意すること。
ファイル名 | 登録対象 | 説明 |
---|---|---|
public_ad.crt |
● | LDAPクライアントへ登録するためのサーバ証明書 |
private_ad.pfx |
● | ADへ登録するための秘密鍵を含むサーバ証明書 (pkcs12形式) |
証明書のインポート
1. ADに秘密鍵をインポート
ADのドメインコントローラとなっているサーバにて、「ファイル名を指定して実行」→「certlm.msc
」を実行し、証明書の管理画面を表示させる。
「個人」を右クリックし、「すべてのタスク」→「インポート」を選択する。
「証明書のインポートウィザード」が表示されるため、以下の通り設定する。
設定項目 | 設定値 |
---|---|
証明書のインポートウィザードの開始 | そのまま次へ |
インストールする証明書ファイル | private_ad.pfx を選択。ファイル選択時に拡張子で*.pfx を選択しないとファイルが表示されないため注意 |
秘密キーの保護 | private_ad.pfx 作成時に設定したパスワードを入力 |
証明書ストア | 「個人」を選択 |
問題なくインポートに成功すると、「正しくインポートされました」と表示される。
2. LDAPクライアント側のサーバに公開鍵をインポート
LDAPクライアントとするサーバにて、「ファイル名を指定して実行」→「certlm.msc
」を実行し、証明書の管理画面を表示させる。
「信頼されたルート証明機関」を右クリックし、「すべてのタスク」→「インポート」を選択する。
「証明書のインポートウィザード」が表示されるため、以下の通り設定する。
設定項目 | 設定値 |
---|---|
証明書のインポートウィザードの開始 | そのまま次へ |
インストールする証明書ファイル | public_ad.crt を選択 |
証明書ストア | 「信頼されたルート証明機関」を選択 |
なお、今回は割愛するが、ドメイン環境であれば、グループポリシーによる証明書登録を行うこともできる。グループポリシーの設定方法の詳細は、以下記事も参照いただきたい。
詳細は割愛するが、グループポリシーの場合は、以下にて設定を行うことができる。
「コンピューターの管理」
→「ポリシー」
→「Windowsの設定」
→「セキュリティの設定」
→「公開キーのポリシー」
→「信頼されたルート証明機関」
3. 接続確認 (ldp.exe
による確認)
LDAPSの接続確認は、ldp.exe
を使用する。なお、「リモートサーバー管理ツール」の「AD DSおよびAD LDSツール」がインストールされていない場合は使えない可能性があるため、その場合は任意のフリーソフトなどを使って確認すること。
「ファイル名を指定して実行」→「ldp
」にてldp.exe
を起動させ、「接続」→「接続」を選択し、以下の通り接続確認を行う。
- サーバー : ADのFQDN
- ポート : 636
- SSL : チェック
問題なく接続されると、以下の通り「Established connection to [ADのFQDN]
」と表示される。
ld = ldap_sslinit("hoge1.example.com", 636, 1);
Error 0 = ldap_set_option(hLdap, LDAP_OPT_PROTOCOL_VERSION, 3);
Error 0 = ldap_connect(hLdap, NULL);
Error 0 = ldap_get_option(hLdap,LDAP_OPT_SSL,(void*)&lv);
Host supports SSL, SSL cipher strength = 256 bits
Established connection to hoge1.example.com.
次に「接続」→「バインド」を選択し、ADを参照可能なユーザを選択する。ドメイン参加済み環境の場合は「現在のログオンユーザーとしてバインド」を選択しても問題ない。
ADのユーザ情報を表示させるため、「表示」→「ツリー」を選択する。ベースDNにADに登録されているOUなどを選択することで、登録されているユーザ情報の一覧を表示させることができる。
以上で、オレオレ証明書を使ってActive DirectoryでLDAPSによる認証を有効化する手順は完了となる。
0 件のコメント:
コメントを投稿