какой сертификат используется для цифровой подписи скрипта PS

#powershell #certificate #sign

#powershell #сертификат #подписать

Вопрос:

Я следил за статьями, описывающими, как подписывать сценарии PowerShell цифровой подписью, создавая самозаверяющий сертификат, импортируя его в доверенные корневые центры сертификации, а затем подписывая сценарий с помощью:

 New-SelfSignedCertificate -DnsName cert_name -CertStoreLocation Cert:CurrentUserRoot -Type Codesigning
Set-AuthenticodeSignature -FilePath D:script.ps1 -Certificate (Get-ChildItem -Path Cert:CurrentUserRoot -CodeSigningCert)
  

это работает для меня, однако я хотел бы использовать сертификат, полученный из AD, которому доверяют во всем домене. Если использовать попытку использовать тот, который имеет слишком «подпись кода», это выводится из той же команды:

 SignerCertificate     Status       Path
-----------------     ------       ----
                      UnknownError script.ps1
  

Почему поле SignerCertificate пустое и почему скрипт не подписывается? Кто-нибудь может объяснить, чего мне здесь не хватает?

Комментарии:

1. Есть ли у сертификата закрытый ключ?

2. Нет, у меня нет закрытого ключа для этого сертификата. Когда я тестировал эту функциональность с помощью самоподписанного сертификата, который я создал сам (самоподписанный) и импортировал его в каталог доверенных корневых центров сертификации, я снял флажок импортировать закрытый ключ. Также, когда я сравнивал эти 2 сертификата, я не видел никакой разницы, это могло вызвать проблему. Нужен ли закрытый ключ?

Ответ №1:

Это хорошо документированный вариант использования. Например:

Привет, сценарист! Как я могу подписывать сценарии Windows PowerShell с помощью корпоративной PKI Windows? Части 1 и 2

https://devblogs.microsoft.com/scripting/hey-scripting-guy-how-can-i-sign-windows-powershell-scripts-with-an-enterprise-windows-pki-part-1-of-2

https://devblogs.microsoft.com/scripting/hey-scripting-guy-how-can-i-sign-windows-powershell-scripts-with-an-enterprise-windows-pki-part-2-of-2

 $cert = Get-ChildItem -Path 'cert:currentusermy -CodeSigningCert'
Set-AuthenticodeSignature -FilePath 'D:Scripts\demoscript.ps1' -Certificate $cert -TimestampServer 'http://timestamp.comodoca.com/authenticode'