Active DirectoryのLDAPS通信を有効化する

Active DirectoryのLDAPS通信を有効化する

Active DirectoryでLDAPS通信ができるようにするための設定を行います。
Active Directoryをインストールするだけで、LDAPSのポートは利用可能になっていますが、SSL証明書がないため有効化されていません。
ここでは、SSL証明書をインストールする手順を記載します。

構築が行いたい場合、以下を参照してください。

Active Directoryを構築する


LDAPS通信を有効化する

LDAPS通信を有効化するには、SSL証明書をADに設定してあげる必要があります。
※証明書はエンタープライズ証明書をADで発行して使用するかサードパーティーCAから発行された証明書をインストールする必要があります。自己署名証明書も使うことはできますが、LDAPクライアント側で自己署名証明書を信頼する必要があります。

ここでは、検証用ADであるため、PowerShellを使用して10年の自己署名証明書を作成して設定したいと思います。

自己署名証明書作成(PowerShell)

New-SelfSignedCertificate を利用して、証明書を発行します。
ADがLDAPSを有効化するためには、以下に気を付けて証明書を発行する必要があります。
1.SubjectとDnsNameにADのルートDNを指定する。
例:DC=ad,DC=example,DC=comなら、SubjectとDnsNameはad.example.com
2.DnsNameの1つ目にSubjectと同じホスト名(ルートDN)を指定する。

$certificate = New-SelfSignedCertificate -DnsName "ADのルートDN(ad.example.com)", "外部から接続するなら、ホスト名" -CertStoreLocation "cert:\LocalMachine\My" -KeyExportPolicy Exportable -NotAfter (Get-Date).AddYears(10)

New-SelfSignedCertificate ではいろいろオプションをつけて証明書を発行できますので、細かいオプションパラメータが知りたい場合は、公式リファレンスを参照してください。
https://docs.microsoft.com/en-us/powershell/module/pkiclient/new-selfsignedcertificate?redirectedfrom=MSDN&view=win10-ps

Certlm.mscを開きます。

証明書 – ローカルコンピューター > 個人 > 証明書と開くと、作成した証明書があると思います。

作成した証明書をPowerShellでエクスポートします。
※上記のCertlm.mscからもエクスポートできますが、パスワードの設定などが必須になるため、あえてPowerShellからエクスポートしています。お好みで。

Export-Certificate -Type CERT -Cert $certificate -FilePath "C:\self-signed.cer"

自己署名証明書のインストール

サービスが証明書を利用できるように、ローカルPCで発行した証明書をサービス用にインポートします。

mmcを起動します。(C:\Windows\System32\mmc.exe)

ファイル > スナップインの追加と削除を選択します。

利用できるスナップインから「証明書」を選択、「追加」します。

「サービスアカウント」を選択し、次へ

何も変更せず「次へ」

「Active Directory Domain Services」を選択して「完了」を押下し、OKでウィンドウを閉じます。

mmcに戻るとコンソールルート配下に「証明書」と表示されていると思います。
「証明書」を展開し、「NTDS\個人」を右クリックし、すべてのタスク > インポートを選択します。

証明書のインポートウィザードで作成した証明書をインポートします。
「次へ」を選択します。

先ほど作成しエクスポートした証明書(C:\self-signed.cer)を選択し、「次へ」

証明書ストア:NTDS¥個人のまま、「次へ」

ファイルと、ストアが間違っていないことを確認し、「完了」

ここまでで、ADに自己署名証明書を設定することができました。

これでLDAPS通信ができるようになります。

※LDAPクライアントで自己署名証明書を信頼する必要あり

LDAPS通信の確認

LDAPSが有効になっているかを確認するために、Windows Server上からLdp.exeを使って確認します。

ldp.exeを起動します。(C:\Windows\System32\ldp.exe)

LDPを起動したら、上部メニュー「接続」> 「接続」と選択します。

サーバー名はActiveDirectoryのホスト名(証明書に記載したDnsNameのどちらか)
ポートは636を選択
SSLにチェックを入れてOKを押して接続を試します。

接続に成功すると以下のような出力がドバっと出ます。
一部マスクしてます。

LDAPSで接続できないとき

もし、失敗したときはイベントログを参照しましょう。
エラーや今どのようになっているのかがわかります。

イベントビューアーを開いて、カスタムビュー > サーバーの役割 > Active Directory ドメイン サービスを選択します。

LDAPS通信が利用できる状態になっている場合、イベントには以下が記録されているはずです。

LDAPSが利用できる状態のとき

レベル:情報
ソース:ActiveDirectory_DomainService
イベントID:1221
メッセージ:現在、Secure Sockets Layer (SSL) で LDAP が利用できます。

SSL証明書が読み込まれていないとき

レベル:警告
ソース:ActiveDirectory_DomainService
イベントID:1220
メッセージ:
サーバーが証明書を取得できないため、Secure Sockets Layer (SSL) で LDAP が利用できなくなります。

追加データ
エラーの値:
8009030e No credentials are available in the security package

このエラーが出ているときは、SSL証明書の作り方が間違っていないか、インポート先が間違っていないかなどを確認してみてください。