Powershellでマルチドメイン自己証明書を作成する ~ActiveDirectoryのLDAPS(LDAP over TLS/SSL)を実現する~

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【5/21開催】Azure OpenAI ServiceによるRAG実装ガイドを公開しました
生成AIを活用したユースケースで最も一番熱いと言われているRAGの実装ガイドを公開しました。そのガイドの紹介をおこなうイベントです!!
https://tech-lab.connpass.com/event/315703/

こんにちは、サイオステクノロジーの小川です。

今回はPowershellでマルチドメインに対応した自己証明書を作成し、Active DirectoryのLDAPS接続を実現する設定方法を紹介します。

以前にPowershellで自己証明書を作成る方法についても紹介していますが、今回はマルチドメインに対応した設定方法について紹介します。

今回はAD2台に対してマルチドメイン証明書を設定し、ADへLDAPS接続を行えるようにします。

 

AD1での設定

Powershellの証明書作成は、New-SelfSignedCertificateコマンドを実行します。

マルチドメイン証明書を作成するにはDnsNameオプションでカンマ区切りで必要なDNS名を設定します。(DnsNameに複数設定し、Subjectにコンピュータ名を指定していた場合、Subjectの値は証明書のDNS名としては無視されます。)

以下コマンドは証明書を作成する際のオプション例です。オプションの詳細は以下の表を参照してください。

$cert = New-SelfSignedCertificate -Subject "AD SSL Cert" -DnsName "ad1.example.com","ad2.example.com" -CertStoreLocation "cert:\LocalMachine\My" -KeyAlgorithm RSA -KeyLength 2048 -KeyExportPolicy ExportableEncrypted -NotAfter (Get-Date).AddYears(10) 
$cert

証明書作成のオプション

オプション説明
-Subject証明書のサブジェクト名を指定
-DnsName証明書のサブジェクト代替名に設定するDNS名を指定
-CertStoreLocation証明書を保存する証明書ストアを指定する
-KeyAlgorithm証明書の秘密鍵の暗号化アルゴリズムを指定
-KeyLength証明書のキーの長さを指定
-KeyExportPolicy証明書の秘密鍵をエクスポートするかどうか  暗号化しない場合はExportable、エクスポートを許可しない場合はNonExportableを指定する
-NotAfter証明書の有効期限を設定 デフォルトは1年

より詳細なオプションについてはこちらを参照してください。

コマンドを実行すると、作成された秘密鍵を含んだ証明書がローカルコンピュータの証明書ストアに格納されます。

証明書が格納されたことを確認するにはスタートボタンを右クリックし、「ファイル名を指定して実行」で「certlm.msc」と入力し、個人の証明書ストアを表示します。

サブジェクト代替名に複数のAD1とAD2のDNS名が設定されていることが確認できます。

作成した自己証明書を信頼してあげないと、実際にSSL通信を行うことができないので、信頼されたルート証明機関に格納します。

先ほど格納した秘密鍵付き証明書から、証明書のみを以下コマンドでエクスポートします。

Export-Certificate -Cert $cert -FilePath example.com.cer

エクスポートした証明書を以下コマンドを実行し、信頼されたルート証明機関に格納します。

Import-Certificate -FilePath example.com.cer -CertStoreLocation "cert:\LocalMachine\Root"

他のサーバに秘密鍵をインポートするために秘密鍵付き証明書をpfx形式でエクスポートします。

$cn = "CN=AD SSL Cert"
$thumbprint = (Get-ChildItem Cert:\LocalMachine\My | ? {$_.Subject -eq $cn}).thumbprint
$pfx = "cert:\LocalMachine\My\$thumbprint"
$password = ConvertTo-SecureString -Force -AsPlainText -String "<秘密鍵付き証明書をインポートするパスワード>"
Export-PfxCertificate -cert $pfx -Filepath example.com.pfx -Password $password

出力したpfxファイルとcerファイルをad2へコピーします

 

AD2の設定

AD2の適当なフォルダにpfxファイルとcerファイルを配置します。

Powershellで証明書をインポートします。(証明書を配置したフォルダをカレントディレクトリとします。)

cerファイルをAD1同様信頼できるルート証明機関にインポートします。

Import-Certificate -FilePath example.com.cer -CertStoreLocation "cert:\LocalMachine\Root"

pfxファイルを以下のコマンドを実行し、個人の証明書ストアにインポートします。パスワードはAD1でpfxファイルをエクスポートした際に設定したパスワードを入力します。

$password = ConvertTo-SecureString -Force -AsPlainText -String "<秘密鍵付き証明書をインポートするパスワード>"
Import-PfxCertificate -FilePath example.com.pfx -CertStoreLocation "cert:\LocalMachine\My" -Password $password

 

クライアントの設定

ADへLDAPS接続を行うクライアントにて証明書をインポートします。(証明書を配置したフォルダをカレントディレクトリとします。)

Powershellの以下コマンドでcerファイルを信頼できるルート証明機関にインポートします。

Import-Certificate -FilePath example.com.cer -CertStoreLocation "cert:\LocalMachine\Root"

 

番外編

上記で紹介したコマンドをまとめてスクリプトを以下に作成しました。以下スクリプトを実行すると、証明書をストアに格納するまで行います。

  • マルチドメイン証明書作成スクリプト(例)
cd C:\tmp
##
## Create self signed certificate
##
$subject = Read-Host "証明書のsubject名を入力してください。"
$dnsname = Read-Host "証明書に利用するFQDN名を入力してください。(複数の場合はカンマ区切りで入力)"
$dns = $dnsname.Split(",")

$filepath = Read-Host "Exportするファイル名を入力してください。(拡張子を除く)"
$password = Read-Host "pfx証明書のパスワードを入力してください。" -AsSecureString
$repassword = Read-Host "再度パスワードを入力してください。"  -AsSecureString

##
## Password Check
##
$bstrInpass = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($password)
$plainPass   = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($bstrInpass)
$bstrInRePass = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($repassword)
$plainRePass   = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($bstrInRePass)
 
function InputPassCheck {
    if ( $plainPass -ne $plainRePass ) {
        Write-Host "パスワードチェックNG"
        exit 1
    }
Write-Host "パスワードチェックOK"
}
InputPassCheck


##
## Issuance of certificate
##
$cert = New-SelfSignedCertificate -Subject $subject -DnsName $dns -CertStoreLocation "cert:\LocalMachine\My" -KeyAlgorithm RSA -KeyLength 2048 -KeyExportPolicy ExportableEncrypted -NotAfter (Get-Date).AddYears(10)
$cert


##
## Export new self signed certificate as .cer file
##
$cerfile = "$filepath.cer"
Export-Certificate -Cert $cert -FilePath $cerfile

##
## Import the new self signed certificate into Trusted Root Certification Authorities
##
Import-Certificate -FilePath $cerfile -CertStoreLocation "cert:\LocalMachine\Root"


##
## Get Cert Thumbprint
##
$cn = "CN=$subject"
$thumbprint = (Get-ChildItem Cert:\LocalMachine\My | ? {$_.Subject -eq $cn}).thumbprint

##
## Export new self signed certificate as .pfx file
##
$pfx = "cert:\LocalMachine\My\$thumbprint"
$pfxfile = "$filepath.pfx"
 
Export-PfxCertificate -cert $pfx -Filepath $pfxfile -Password $password
  • 証明書インストールスクリプト(例)

上記スクリプトで証明書を作成した後、別サーバに証明書を配置し、ローカルの証明書ストアに格納するスクリプトになります。

※ cerファイルとpfxファイルをC:\tmp フォルダに配置していることを想定しています。

cd C:\tmp

$filepath = Read-Host "Importするファイル名を入力してください。(拡張子を除く)" 
$password = Read-Host "pfx証明書のパスワードを入力してください。" -AsSecureString

##
## Import the new self signed certificate into Trusted Root Certification Authorities
##
$cerfile = "$filepath.cer"
Import-Certificate -FilePath $cerfile -CertStoreLocation "cert:\LocalMachine\Root"

##
## Export new self signed certificate as .pfx file
## 
$pfxfile = "$filepath.pfx"
Import-PfxCertificate -FilePath $pfxfile -CertStoreLocation "cert:\LocalMachine\My" -Password $password
アバター画像
About 小川雄大 27 Articles
IDaaSプロジェクトを担当。
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる