#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
$cert = Get-ChildItem -Path 'cert:currentusermy -CodeSigningCert'
Set-AuthenticodeSignature -FilePath 'D:Scripts\demoscript.ps1' -Certificate $cert -TimestampServer 'http://timestamp.comodoca.com/authenticode'