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

$dnsNames = @("example.com", "example.org")
New-SelfSignedCertificate -CertStoreLocation Cert:\LocalMachine\My -DnsName $dnsNames -FriendlyName "Example Cert" -Signer Cert:\LocalMachine\Root\QWREEWRQ12123132QWEQWE123123

Но когда я запускаю этот скрипт, я получаю сообщение об ошибке CertEnroll::CSignerCertificate::Initialize: ключ не существует. 0x8009000d (-2146893811 NTE_NO_KEY).

Закрытый ключ доступен в хранилище сертификатов, и сертификат получил предназначенные для аутентификации клиента и сервера аутентификации.

Что вызывает это сообщение об ошибке?

2 ответа2

0

Для всех, кто борется с этим.

Убедитесь, что Powershell работает от имени администратора (это очень важно).

Помните, что это работает только в Windows 10, если вы пытаетесь использовать команду New_SelfSignedCertificate в старых ОС, вы обнаружите, что она устарела и не поддерживает некоторые расширенные параметры, некоторые из которых очень необходимы, например, несколько значения для -DnsName с поддержкой SAN. Лично я даже не мог заставить его работать на Server 2012 R2, когда я хотел создать сертификат с подстановочными знаками SAN (* .mydomain.com). Просто придерживайтесь версии на Windows 10, и все будет в порядке;)

Присвойте Root CA, который вы уже создали (я полагаю, вы сделали это) переменной:

$rootcert = ( Get-ChildItem -Path cert:\LocalMachine\My\6980327922B448834C67547B20DB8F054326F140

Теперь передайте эту переменную в команду New-SelfSignedCertificate:

New-SelfSignedCertificate -DnsName MyDnsName,MyOtherDnsName -CertStoreLocation cert:\LocalMachine\My -Signer $rootcert -KeyUsage CertSign,CRLSign,DataEncipherment,DigitalSignature,KeyAgreement,KeyEncipherment -Type SSLServerAuthentication

В приведенном выше примере создается сертификат SSL, но вы можете создать любой из доступных типов, установив другое значение для переменной -Type. Вы также можете изменить значения -KeyUsage на соответствующие значения. Смотрите документацию дополнительных параметров здесь:

https://docs.microsoft.com/en-us/powershell/module/pkiclient/new-selfsignedcertificate?view=win10-ps

0

По крайней мере, в примерах путь заключен в кавычки, и, кроме того, ваш параметр записан неправильно (CertStoreLocaiton вместо CertStoreLocation). Кроме того, вам, возможно, придется использовать ключ -ExistingKey .

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