たれながし.info

とあるITエンジニアの備忘録

PowerShellでオレオレ証明書を作成する


目的

PowerShellの「New-SelfSignedCertificate」で、「オレオレ証明書自己署名証明書)」を作成できます。

learn.microsoft.com

オレオレ証明書の作成

作成する証明書のタイプは「-Type」で指定します。下記5つから選択が可能です。

  1. SSLServerAuthentication
  2. CodeSigningCert
  3. DocumentEncryptionCert
  4. DocumentEncryptionCertLegacyCsp
  5. Custom

今回は「TLSサーバー証明書の作成」「コードサイニング証明書」を作ってみます。

TLSサーバー証明書の作成

「-Type SSLServerAuthentication」でTLSサーバー証明書の作成が可能です。
「-Type」を未指定の場合もTLSサーバー証明書になります。

New-SelfSignedCertificate
    -DnsName "www.test.com", "www2.test.net"
    -CertStoreLocation "cert:\LocalMachine\My"

この例では、証明書の保存場所を「LocalMachine」としているので、管理者で実行する必要があります。
作成した証明書は「証明書の管理」から確認が可能です。


コードサイニング証明書の作成

「-Type CodeSigning」でコードサイニング証明書の作成が可能です。
この例では、パラメータを配列にしてコマンドレットの引数として渡してみます。

$params = @{
    Subject = 'CN=CodeSigningCert'
    Type = 'CodeSigning'
    CertStoreLocation = 'Cert:\CurrentUser\My'
    HashAlgorithm = 'sha256'
}
New-SelfSignedCertificate @params

作成した証明書は「証明書の管理」から確認が可能です。


秘密鍵と証明書のエクスポート

秘密鍵と証明書をPFX形式でエクスポートできます。
下記ではGUIで操作していますが、「certutil.exe」でも実施可能です。

証明書ストアで証明書を右クリック > すべてのタスク > エクスポート

秘密鍵を含んでエクスポートするので「はい、秘密キーをエクスポートします」を選択する

「証明書のパスにある証明書を可能であればすべて含む」は、自己署名証明書の場合はどちらでも良い
「すべての拡張プロパティをエクスポートする」はチェックする
「証明書のプライバシーを有効にする」をチェックすると、秘密鍵だけでなく証明書もパスフレーズで暗号化される

パスフレーズと出力パスを指定するとPFX形式で出力されます。
PFX形式からPEM形式への変換は「OpenSSL」や「Convert-PfxToPem.ps1」で実施可能です。

OpenSSLを利用した場合のコマンドは以下の通りです。

> openssl pkcs12 -in <PFX形式ファイル名> -nocerts -nodes -out <秘密鍵ファイル名>
> openssl pkcs12 -in <PFX形式ファイル名> -clcerts -nokeys -out <証明書ファイル名>