どうも、Tです。
以前AD CSを使ってAD DSでLDAPS通信する方法を行いましたが、AD CSが準備できないパターンも往々としてあるので、AD DS単体で自己署名証明書を生成してLDAPS通信する方法をまとめました。
目次
やりたいこと
- AD CSも外部CAもない環境でAD DSのLDAPSを使いたい。
- AD DS上のPower Shellで自己署名証明書を使ってLDAPSを使いたい。
自己署名証明書の生成に、New-SelfSignedCertificateコマンドを使っていますが、マイクロソフトの資料からテスト目的であることが明記されています。本番環境で使用する場合は、正式な証明書を利用できないか検討しましょう。
The New-SelfSignedCertificate cmdlet creates a self-signed certificate for testing purposes
環境
- AD DS:Windows Server2019(1台目ホスト名:testad、2台目ホスト名:testad2)
この記事の手順では、すべての作業をすべてのADで実施する必要があります。
事前確認
まずAD DS単体でLDAPS通信ができないことを確認する。
ファイル名を指定して実行から「ldp.exe」を実行します。
「接続」をクリックします。
下記を値を設定して「OK」をクリックします。
- サーバー:AD DSのFQDN
- サポート:636
- SSL:チェックあり
「接続を開くことができません。」が表示されLDAPS通信が行えないことがわかりました。
LDAPS通信に必要な証明書がないので行えません。これから、Power Shellで証明書を作成してLDAPS通信可能なことを確認します。
PowerShellで証明書の作成とインポート
スクリプトの作成
下記のPowerShellのスクリプトを「self-cert.ps1」など任意の名前で保存します。このスクリプトでは、下記のことを行っています。
- 自己署名証明書の作成とコンピュータの個人証明書ストアへの保存
- 作成した証明書をファイルへのエクスポート
- エクスポートした証明書をコンピュータの信頼されたルート証明書機関ストアへのインポート
## ## 1.Create self signed certificate ## #-Subject:サブジェクトの値(コモンネーム)。 #-DnsName:サブジェクト代替名拡張に入れる1つ以上のDNS名。 #-CertStoreLocation:証明書の保存先の指定。\LocalMachine\My"は、「ローカルコンピュータ」->「個人」の指定。 #-KeyAlgorithm:証明書のアルゴリズムの指定。 #-KeyLength:キーを長さを指定。 #-KeyExportPolicy:秘密鍵のエクスポートポリシーを指定。今回はエクスポート不可を指定。 #-NotAfter:証明書の有効期限の指定。作成日時から10年後を指定。 $hostname = Read-Host "ADのFQDNを入力してください" $cert = New-SelfSignedCertificate -Subject $hostname -DnsName $hostname -CertStoreLocation "cert:\LocalMachine\My" -KeyAlgorithm RSA -KeyLength 2048 -KeyExportPolicy NonExportable -NotAfter (Get-Date).AddYears(10) $cert ## ## 2.Export new self signed certificate as .cer file ## #-Cert:エクスポートする証明書の指定 #-FilePath:エクスポートする証明書ファイルのパス $cerfile = "$hostname.cer" Export-Certificate -Cert $cert -FilePath $cerfile ## ## 3.Import the new self signed certificate into Trusted Root Certification Authorities ## #Import-Certificate: #-FilePath:インポートする証明書ファイルのパス #-CertStoreLocation:インポートする証明書の保存するパス。 Import-Certificate -FilePath $cerfile -CertStoreLocation "cert:\LocalMachine\Root"
スクリプトで使っている証明書関連のコマンドの詳細は下記をご参照ください。
New-SelfSignedCertificate
Export-Certificate
Import-Certificate
スクリプトの実行
AD DSにスクリプトファイルを任意の場所に保存します。
スクリプトを実行します。
スクリプトの実行場所に、Export-Certificateコマンドでエクスポートされた証明書ファイルが生成されています。これはスクリプト内のImport-Certificateコマンドでインポート済みのため削除してかまいません。
証明書の確認
スクリプトで証明書が生成されているか確認します。
個人ストア
New-SelfSignedCertificateコマンドで生成された証明書ファイルは、個人ストアに表示されます。
自身で発行したこと、指定した有効期限であることがわかります。また、生成した証明書のため秘密鍵ももっています。
サブジェクトとDNS(サブジェクト代替名)も指定したものが設定されています。
拡張キーの使用方法は「クライアント認証」「サーバー認証」が設定されています。LDAPS通信にはサーバー認証があればOKなので、このまま進めます。
今回は使用方法は指定せずに生成しているため「クライアント認証」「サーバー認証」がデフォルトになります。New-SelfSignedCertificateコマンドの-TextExtensionオプションで指定することもできます。
Client Authentication. 1.3.6.1.5.5.7.3.2
Server Authentication. 1.3.6.1.5.5.7.3.1
Secure Email. 1.3.6.1.5.5.7.3.4
Code Signing. 1.3.6.1.5.5.7.3.3
Timestamp Signing. 1.3.6.1.5.5.7.3.8
信頼されたルート証明書機関ストア
「Export-Certificate」「Import-Certificate」コマンドでインポートされた証明書は、信頼されたルート証明機関ストアに確認できます。
エクスポートファイルは秘密鍵をもっていません。他は個人ストアと同じ内容です。
LDAPS確認
証明書が配置できたので、ldp.exeから再度確認します。
正常にLDAPS通信が行えました。
まとめ
サイオステクノロジーさんの記事が非常にわかりやすく、スクリプトも丸コピさせていただきました。ありがとうございますm(_ _”m)