15

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

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

3 ответа3

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`""
}
7

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

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

использование

help about_signing

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

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

5

После того, как у меня был сертификат, я захотел использовать импортированный на моей учетной записи пользователя. Этот regkey дал мне возможность подписать в контекстном меню (я использую 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]"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .