Windows で証明書を管理する | サンプルコマンドなどまとめ

Windows における証明書とは

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


[Windows 11まとめへ戻る]