PowerShellでpfx形式ではなくcer形式の自己署名証明書を作成し、ps1ファイルに署名する方法を説明します。
1. 自己署名証明書を作成する
自己署名証明書を作成するには、New-SelfSignedCertificate
コマンドを使用します。
# 自己署名証明書を作成する
New-SelfSignedCertificate -CertStoreLocation "Cert:\LocalMachine\My" -Subject "CN=My Code Signing Certificate" -KeyExportPolicy Exportable -FriendlyName "My Code Signing Certificate" -Type CodeSigning -NotAfter ([DateTime]::Today.AddDays(30))
このコマンドは、C:\path\to\cert\code.cerというファイル名で、cer形式の自己署名証明書を作成します。
2. 署名用証明書のパスを確認する
署名用証明書のパスを確認するには、Get-ChildItem
コマンドを使用します。
# 署名用証明書のパスを確認する
$cert = Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object {$_.Subject -like "*Code Signing*"} | Select-Object -First 1
このコマンドは、署名用証明書のパスの一覧を表示します。
3. 署名するps1ファイルを指定する
署名するps1ファイルを指定するには、$ps1File
変数にファイルのパスを指定します。
$ps1File = "C:\path\to\ps1\file.ps1"
4. 署名を行う
署名を行うには、Set-AuthenticodeSignature
コマンドを使用します。
# 署名を行う
Set-AuthenticodeSignature -Path $ps1File -Cert $certPath
このコマンドは、$ps1File
変数で指定されたファイルに、$certPath
変数で指定された証明書を使用して署名します。
具体的なコードは、以下のとおりです。
# 自己署名証明書を作成する
New-SelfSignedCertificate -CertStoreLocation "Cert:\LocalMachine\My" -Subject "CN=My Code Signing Certificate" -KeyExportPolicy Exportable -FriendlyName "My Code Signing Certificate" -Type CodeSigning -NotAfter ([DateTime]::Today.AddDays(30))
# 署名用証明書のパスを確認する
$cert = Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object {$_.Subject -like "*Code Signing*"} | Select-Object -First 1
# 署名するps1ファイルを指定する
$ps1File = "C:\path\to\ps1\file.ps1"
# 署名を行う
Set-AuthenticodeSignature -Path $ps1File -Cert $certPath
このコードを実行すると、C:\path\to\ps1\file.ps1というps1ファイルに、C:\path\to\cert\code.cerという自己署名証明書を使用して署名されます。
注意点
- 自己署名証明書は、信頼できる認証局 (CA) によって発行された証明書ではないため、署名されたファイルは、信頼されていない可能性があることに注意してください。
- 署名されたファイルは、署名の有効期限が切れると、実行できなくなる可能性があることに注意してください。
補足
-
New-SelfSignedCertificate
コマンドで、-Type CodeSigning
オプションを指定すると、cer形式の自己署名証明書が作成されます。 -
Set-AuthenticodeSignature
コマンドで、-Cert
パラメーターに、-Type CodeSigning
オプションを指定して作成された証明書を指定すると、cer形式の証明書を使用して署名されます。