PowerShellスクリプトに簡単に署名する方法は?


15

PowerShellでAllSigned実行ポリシーを使用することをお勧めしますが、スクリプトに自己署名するには、数百メガバイトのダウンロードとインストールが必要であり、署名プロセスは面倒なようです。

ドキュメントに記載されているよりも簡単なPowerShellスクリプトに署名する方法はありますか?

回答:


7

署名を行うには、Set-AuthenticodeSignatureコマンドレットを使用できます。もちろん、これには証明書が必要です。コード署名証明書を作成できる認証機関(あるとは限りません)がある場合。それ以外の場合は、自己署名証明書を作成するためのさまざまなツールがあります。

あなたの証明書ストアに証明書をインストール(オープン.cerまたは.pfxこれを行うには、Windowsエクスプローラでファイルを)し、その後にそれを渡すSet-AuthenticodeSignaturecert:プロバイダ/ドライブがお店での証明書へのアクセスを提供します)。

使用する

help about_signing

または、詳細についてはそのヘルプトピックのオンラインバージョン(Windows SDKツールを使用した自己署名証明書の作成を含む[1])。

[1]これはあなたが参照している大きなダウンロードだと思います。必要なビットをインストールするか、他のツールを使用できます(OpenSSLには証明書の生成が含まれます)。この目的のために、SDKの取得は1回限りのアクティビティです。


私はこの答えを受け入れ、ドキュメントに記載されているように、ショートカットと署名を行うだけでよいと仮定しています。
ヴィルKoskinen

1
かなりの数の「開発者」のように、最初の設定と学習は難しいですが、実際の練習(特に定期的に行われる場合)はそうではありません。
リチャード

7

このPowerShellスクリプトを使用します。

## sign-script.ps1
## Sign a powershell script with a Thawte certificate and 
## timestamp the signature
##
## usage: ./sign-script.ps1 c:\foo.ps1 

param([string] $file=$(throw “Please specify a script filepath.”)) 

$certFriendlyName = "Thawte Code Signing"
$cert = gci cert:\CurrentUser\My -codesigning | where -Filter 
  {$_.FriendlyName -eq $certFriendlyName}

# https://www.thawte.com/ssl-digital-certificates/technical-  
#   support/code/msauth.html#timestampau
# We thank VeriSign for allowing public use of their timestamping server.
# Add the following to the signcode command line: 
# -t http://timestamp.verisign.com/scripts/timstamp.dll 
$timeStampURL = "http://timestamp.verisign.com/scripts/timstamp.dll"

if($cert) {
    Set-AuthenticodeSignature -filepath $file -cert $cert -IncludeChain All -   
      TimeStampServer $timeStampURL
}
else {
    throw "Did not find certificate with friendly name of `"$certFriendlyName`""
}

5

証明書を取得したら、ユーザーアカウントでインポートを使用したかったのです。このレジストリキーは、私にオプションを与えたサインコンテキストメニュー(Iは、Windows 7を使用しています)で、。署名する証明書の保存方法が異なる場合は、最後にPowerShellコマンドを変更するだけです。

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Classes\Microsoft.PowerShellScript.1]

[HKEY_CURRENT_USER\Software\Classes\Microsoft.PowerShellScript.1\Shell]

[HKEY_CURRENT_USER\Software\Classes\Microsoft.PowerShellScript.1\Shell\Sign]

[HKEY_CURRENT_USER\Software\Classes\Microsoft.PowerShellScript.1\Shell\Sign\Command]
@="C:\\\Windows\\\System32\\\WindowsPowerShell\\\v1.0\\\powershell.exe -command Set-AuthenticodeSignature '%1' @(Get-ChildItem cert:\\\CurrentUser\\\My -codesigning)[0]"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.