Windows において証明書 (certificate) は"証明書ストア"という場所に保存されます。以下の2種類があります。
(1)ローカル コンピューターの証明書ストア
以下のレジストリに保存されます。
HKEY_LOCAL_MACHINE - Software - Microsoft - SystemCertificates
以下のツールで確認が可能です。
certlm.msc
(2)現在のユーザーの証明書ストア
以下のレジストリに保存されます。
HKEY_CURRENT_USER - Software - Microsoft - SystemCertificates
自己証明書作成のPowershell サンプルコードを紹介します。有効期間は5年です。"cert:\LocalMachine\My"に保管されます。
PS C:\>$Subject ="example.com" PS C:\>$SAN ="www..example.com" PS C:\> $cert = New-SelfSignedCertificate -Subject $Subject -DnsName $SAN -CertStoreLocation "cert:\LocalMachine\My" -KeyAlgorithm RSA -KeyLength 2048 -KeyExportPolicy Exportable -NotAfter (Get-Date).AddYears(5) |
-Subjec :証明書おにサブジェクトを設定します。Windowsの管理ツールでは"発行元","発行先","サブジェクト"などと表示されます。
-DnsName: サブジェクト代替名として設定されます。(SAN)。
#クライアント証明書を作成する 拡張鍵用途を証明書に付加する設定を行う。(OID値:2.5.29.37)
#拡張キー使用方法」(2.5.29.37)は、既定の「サーバー認証 (1.3.6.1.5.5.7.3.1)、クライアント認証 (1.3.6.1.5.5.7.3.2)」
インストールされた証明書の一覧を表示します。
(1)ローカルコンピュータの証明書一覧
PS C:\> Get-ChildItem -Path cert:\LocalMachine -Recurse |
(2)現在のユーザーの証明書ストア
PS C:\> Get-ChildItem -path cert:\CurrentUser -Recurse |
(3)"Thumbprint"を指定して既存の証明書を取得。
$cert = Get-ChildItem -Path "cert:\LocalMachine\My\**************************************" |
上記の自己証明書でサインしたクライアント証明を作成します。次の例では10個のクライアント証明書を作成しています。後でクライアント証明書としてエクスポートする必要があるため、"-KeyExportPolicy Exportable" を指定しています。
$cert = Get-ChildItem -Path "cert:\LocalMachine\My\**************************************" #1から10まで for ($i=1; $i -lt 5; $i++) { #2.5.29.37:Enhanced Key Usage 1.3.6.1.5.5.7.3.2:クライアント認証 $client = New-SelfSignedCertificate -Type Custom -DnsName ClientCert${i} -KeySpec Signature -Subject "CN=ClientCert${i}" -KeyExportPolicy Exportable -HashAlgorithm sha256 -KeyLength 2048 -CertStoreLocation "Cert:\CurrentUser\My" -Signer $cert -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.2") -NotAfter $(Get-Date).AddDays(3650) $password = ConvertTo-SecureString -String "password" -Force -AsPlainText Export-PfxCertificate -Cert $client -FilePath "c:\temp\ClientCert${i}.pfx" -Password $password } |
Common Name(コモンネーム) とは、SSLサーバ証明書の設定項目の一つ。SSL接続する場合、ブラウザのURLに指定するホスト名と一致している必要あり。
Windows において証明書の管理ツールは以下のコマンドで実行が可能。
Certmgr.msc