1

Я создал собственный сертификат с помощью командлета Power Shell

New-SelfSignedCertificate -DnsName test.OJ.com -CertStoreLocation cert:\LocalMachine\My

После этого сертификат можно увидеть в сертификате под личными \ сертификатами.

Теперь я хочу использовать этот сертификат для подписи сценария PS. Я попробовал два способа 1. с консоли PS

$cert = @(Get-ChildItem cert:\CurrentUser\My -CodeSigning)[0] 

Set-AuthenticodeSignature .\scriptTosing.ps1 $cert

после первого выполнения команды переменная $ cert пуста

2. Использование SingTool.exe

signtool.exe  sign /debug /a ".\scriptTosing.ps1" 

Это результат:

The following certificates were considered:


After EKU filter, 0 certs were left.

After expiry filter, 0 certs were left.

After Private Key filter, 0 certs were left.

SignTool Error: No certificates were found that met all the given criteria.

пожалуйста, порекомендуйте

1 ответ1

1

Это было сложно выяснить, но в конце концов, очень простое решение

Документация Get-ChildItem -CodeSigning гласит:

-CodeSigningCert

Получает только те сертификаты с правами подписи кода. Этот параметр получает сертификаты, имеющие "Подпись кода" в их значении свойства EnhancedKeyUsageList.

Ваша переменная $cert пуста, потому что она не получает отдачу от команды get-childitem , потому что ваш сертификат не знает, что это сертификат CodeSigning, поскольку свойство EnhancedKeyUsage не равно "CodeSigning" (также вы сохраняете Сертификат в LocalMachine , но хотите прочитать его из CurrentUser что неправильно).

Поэтому, когда вы создаете свой сертификат с помощью New-SelfSignedCertificate вы должны сообщить сертификату, что это должен быть сертификат CodeSigning.

Командлет New-SelfSignedCertificate имеет следующий параметр:

Тип (Microsoft.CertificateServices.Команды.CertificateType)

Указывает тип сертификата, который создает этот командлет. Допустимые значения для этого параметра:

- CodeSigningCert - Пользовательский - DocumentEncryptionCert - DocumentEncryptionCertLegacyCsp - SSLServerAuthentication (по умолчанию)

Итак, весь ваш сценарий должен выглядеть так:

New-SelfSignedCertificate -DnsName test.OJ.com -CertStoreLocation cert:\LocalMachine\My -type CodeSigning
$cert = @(Get-ChildItem cert:\LocalMachine\My -CodeSigning)[0] 
Set-AuthenticodeSignature .\scriptTosing.ps1 $cert

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