##プライベート認証局のPKI自動生成に用いたスプリクトに関して
###windowsサーバーに構築したプライベート認証局の電子証明書を自動生成したいとユーザーより相談がありその際以下のスプリクトを作成しましたので備忘の意味で残します。
##■プライベート認証局とは
認証局とは、デジタル証明書を発行する機関でプライベート認証局とは
会社など限られた組織内でのみ運用する認証局です。
##■要件
Activedirectoryを作成しているユーザーアカウントに対してプライベート認証局の電子証明書を作成したい。
##■準備するもの
•create_and_exportpfx.ps1・・・スクリプト本体
•sample.inf・・・CSR 構成ファイルの作成スプリクト
•userdata.txt・・・ユーザアカウントとパスワードの設定ファイル
•CSRフォルダ・・・ユーザアカウントのCSR格納フォルダ
•REQフォルダ・・・各ユーザの証明書発行要求の格納フォルダ
•PFXフォルダ・・・ 各ユーザのエクスポートした証明書
##■スプリクト
###1、CSR 構成ファイルの作成
構成ファイルの設定に必要な情報を収集します。サブジェクト名を完成させるため、View サーバの FQDN と、組織単位、組織、市区町村、都道府県、および国を把握しておく必要があります。
[NewRequest]
Subject = "CN=****ID"
#導入環境に適切な値に変更します。 証明を利用するホスト名
PrivateKeyArchive = FALSE
KeySpec = 1
KeyLength = 2048
SMIME = FALSE
Exportable = TRUE
Exportable = FALSE
#秘密鍵のエクスポートする。
UserProtected = FALSE
MachineKeySet = FALSE
UseExistingKeySet = FALSE
ProviderName = "Microsoft Enhanced Cryptographic Provider v1.0"
ProviderType = 1
RequestType = PKCS10
KeyUsage = 0xa0
; CERT_DIGITAL_SIGNATURE_KEY_USAGE, CERT_KEY_ENCIPHERMENT_KEY_USAGE
[EnhancedKeyUsageExtension]
OID=1.3.6.1.5.5.7.3.2
; Client Authentication
[RequestAttributes]
CertificateTemplate=ユーザー名
###2、スクリプト本体作成
証明書発行要求(CSR)ファイル、サーバ証明書を発行するための署名要求(REQ)ファイル、秘密鍵をパスワードで保護しつつ証明書と一緒に格納できる証明書(PFX)ファイルを生成し指定したフォルダに保存するスプリクト、ファイル名と秘密鍵はuserdata.txtを利用する。
$CSR="CSR"
$REQ="REQ"
$PFX="PFX"
# 証明機関名
$Cert="ad.example.local\example-AD-CA" # 証明期間名
# アカウントリスト
$list="userdata.txt"
foreach ($line in Get-Content $list) {
$ID = echo $line | %{$_.split(" ")[0]}
$pass = echo $line | %{$_.split(" ")[1]}
$(Get-Content "sample.inf") -replace "PartnerID","$ID" > $CSR\$ID.inf
certreq.exe -new -q -f $CSR\$ID.inf REQ\$ID.req
certreq.exe -submit -q -f -config $Cert $REQ\$ID.req tmp\$ID.cer
certreq.exe -accept -q -f -user tmp\$ID.cer
certutil -f -user -p $pass -exportPFX $ID $PFX\$ID.pfx