🐷

PowerShell スクリプトに自己証明書で署名を付与する

2024/08/06に公開

PowerShell スクリプトに自己署名を付与する

署名付与スクリプト例

SelfSign.ps1
# 管理者権限付きのコマンドプロンプトで下記を実行すればいい
# 例> powershell .\SelfSign.ps1 .\Target.ps1


$MyPs1 = $Args[0];

# ファイルのフルパスを取得する
$ScriptFileFullPath = Get-Command $MyPs1 | select $_.FullName

# 自己証明書を用意する
$Cert = New-SelfSignedCertificate `
  -Subject "CN=PowerShell Script by myself, OU=Self-signed RootCA" `
  -KeyAlgorithm RSA `
  -KeyLength 4096 `
  -Type CodeSigningCert `
  -CertStoreLocation Cert:\CurrentUser\My\ `
  -NotAfter ([datetime]"2099/01/01")

# 作成した自己証明書をルートに移動する
Move-Item "Cert:\CurrentUser\My\$($Cert.Thumbprint)" Cert:\CurrentUser\Root

# ルート証明書として自己署名する
$RootCert = @(Get-ChildItem cert:\CurrentUser\Root -CodeSigningCert)[0]
Set-AuthenticodeSignature $ScriptFileFullPath.Source $RootCert

署名方法

署名対象のスクリプトを Target.ps1 だとします。

  1. 管理者権限付きのコマンドプロンプトを開く。
  2. powershell .\SelfSign.ps1 .\Target.ps1 のように実行する。

Discussion