Как подписать сценарий PowerShell легко?

Я предпочел бы использовать политику казни AllSigned с PowerShell, но самоподписать мои сценарии, кажется, требует нескольких сотен мегабайтов загрузки и установки, и процесс подписания, кажется, стычка.

Существует ли более простой способ подписать сценарий PowerShell, чем описанный в документации?

15
задан 11.01.2010, 11:18

2 ответа

Чтобы сделать подписание Вас может использовать Set-AuthenticodeSignature cmdlet. Это, конечно, требует сертификата. Если у Вас есть Центр сертификации (вряд ли), который сможет создать сертификат для подписывания кода. Иначе существуют различные инструменты для создания самоподписанного сертификата.

Вы устанавливаете сертификат в своем хранилище сертификатов (откройтесь .cer или .pfx файл в Windows Explorer, чтобы сделать это), и затем передают его Set-AuthenticodeSignature ( cert: поставщик/диск предоставляет доступ к сертификатам в Вашем хранилище).

Использовать

help about_signing

или интерактивная версия той темы справки для деталей (включая создание самоподписанного сертификата с помощью инструментов Windows SDK [1]).

[1] Я предполагаю, что это - большая загрузка, к которой Вы обращаетесь: можно просто установить биты, в которых Вы нуждаетесь или используете другие инструменты (OpenSSL включает поколение сертификата). Получение SDK является, с этой целью, одноразовым действием.

7
ответ дан 07.12.2019, 11:07

Я использую этот сценарий 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`""
}
7
ответ дан 07.12.2019, 11:07

Теги

Похожие вопросы