A chave não existe ao executar New-SelfSignedCertificate

0

Eu escrevi um script que vai criar certificados para mim e que deve assiná-los usando outro certificado.

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

Mas quando executo este script, recebo a mensagem de erro CertEnroll :: CSignerCertificate :: Initialize: Key não existe. 0x8009000d (-2146893811 NTE_NO_KEY) .

A chave privada está disponível no armazenamento de certificados e o certificado obteve os propósitos pretendidos de Autenticação de Cliente e Autenticação de Servidor.

O que está causando essa mensagem de erro?

    
por Mikael Dúi Bolinder 31.07.2017 / 13:06

2 respostas

0

Para qualquer outra pessoa que esteja lutando com isso.

Certifique-se de que o Powershell está sendo executado como administrador (isto é crítico).

Lembre-se que isso só funciona no Windows 10, se você estiver tentando usar o comando New_SelfSignedCertificate em sistemas operacionais mais antigos, descobrirá que está desatualizado e não suporta alguns dos parâmetros estendidos, alguns dos quais são muito necessário, por exemplo vários valores para -DnsName com suporte a SANs. Pessoalmente, não consegui fazê-lo funcionar no Server 2012 R2 quando quis criar um certificado com curingas de SAN (* .mydomain.com). Basta ficar com a versão no Windows 10 e você vai ficar bem;)

Atribua a CA raiz que você já criou (suponho que você fez isso) com uma variável:

$rootcert = ( Get-ChildItem -Path cert:\LocalMachine\My80327922B448834C67547B20DB8F054326F140

Agora passe essa variável para o comando New-SelfSignedCertificate:

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

O exemplo acima cria um certificado SSL, mas você pode criar qualquer um dos tipos disponíveis definindo um valor diferente para a variável -Type. Você também pode alterar os valores de -KeyUsage para o (s) valor (es) apropriado (s). Veja a documentação dos parâmetros opcionais aqui:

link

    
por 18.12.2017 / 11:56
0

Pelo menos os exemplos incluem o caminho entre aspas e em Além disso, seu parâmetro está escrito errado ( CertStoreLocaiton em vez de CertStoreLocation ). Além disso, você pode ter que usar a opção -ExistingKey .

    
por 31.07.2017 / 13:49