Como faço para criar um certificado auto-assinado para assinatura de código no Windows?

StackOverflow https://stackoverflow.com/questions/84847

  •  01-07-2019
  •  | 
  •  

Pergunta

Como faço para criar um certificado auto-assinado para assinatura de código usando ferramentas do Windows SDK?

Foi útil?

Solução

Atualizado Resposta

Se você estiver usando as seguintes versões do Windows ou posteriores: Windows Server 2012, Windows Server 2012 R2 ou Windows 8.1, em seguida, MakeCert agora está obsoleta , e Microsoft recomenda o uso de do PowerShell Cmdlet nova SelfSignedCertificate .

Se você estiver usando uma versão mais antiga, como o Windows 7, você precisa ficar com MakeCert ou outra solução. Algumas pessoas sugerem o Public Key Infrastructure Powershell (PSPKI) Módulo .

Resposta Original

Enquanto você pode criar um certificado de assinatura de código auto-assinado (SPC - Software editor Certificate) de uma só vez, eu prefiro fazer o seguinte:

Criando uma autoridade de certificado auto-assinado (CA)

makecert -r -pe -n "CN=My CA" -ss CA -sr CurrentUser ^
         -a sha256 -cy authority -sky signature -sv MyCA.pvk MyCA.cer

(^ = permitir lote de linha de comando para a linha envoltório)

Isso cria um certificado auto-assinado (-r), com uma chave particular exportável (-PE). É o chamado "Minha CA", e deve ser colocado na loja CA para o usuário atual. Estamos usando o algoritmo SHA-256. A chave é destinado a assinatura (-Sky).

A chave privada deve ser armazenada no arquivo MyCA.pvk, e o certificado no arquivo MyCA.cer.

Importar o certificado da CA

Porque não há nenhum ponto em ter um certificado CA se você não confiar nele, você precisa importá-lo para o armazenamento de certificados do Windows. Você pode usar o MMC snap-in Certificados, mas a partir da linha de comando:

certutil -user -addstore Root MyCA.cer

Criando um certificado de assinatura de código (SPC)

makecert -pe -n "CN=My SPC" -a sha256 -cy end ^
         -sky signature ^
         -ic MyCA.cer -iv MyCA.pvk ^
         -sv MySPC.pvk MySPC.cer

É praticamente o mesmo que acima, mas estamos fornecendo uma chave de emissor e de certificado (os interruptores ic e -IV).

Nós também vai querer converter o certificado ea chave em um arquivo PFX:

pvk2pfx -pvk MySPC.pvk -spc MySPC.cer -pfx MySPC.pfx

Se você quiser proteger o arquivo PFX, adicione a opção -PO, caso contrário Pvk2pfx cria um arquivo PFX sem senha.

Usando o certificado de assinatura de código

signtool sign /v /f MySPC.pfx ^
              /t http://timestamp.url MyExecutable.exe

( ver porque timestamps pode importar )

Se você importar o arquivo PFX no armazenamento de certificados (você pode usar PVKIMPRT ou o snap-in MMC), você pode assinar o código da seguinte forma:

signtool sign /v /n "Me" /s SPC ^
              /t http://timestamp.url MyExecutable.exe

Algumas possíveis URLs timestamp para signtool /t são:

  • http://timestamp.verisign.com/scripts/timstamp.dll
  • http://timestamp.globalsign.com/scripts/timstamp.dll
  • http://timestamp.comodoca.com/authenticode

A documentação completa Microsoft

Downloads

Para aqueles que não são desenvolvedores .NET, você vai precisar de uma cópia do quadro Windows SDK e .NET. Um link atual está disponível aqui: SDK & .NET (que instala makecert em C:\Program Files\Microsoft SDKs\Windows\v7.1). Sua milhagem pode variar.

MakeCert está disponível no Visual Studio Command Prompt. Visual Studio 2015 tem ele, e ele pode ser iniciado a partir do menu Iniciar no Windows 7 em "desenvolvedor Command Prompt para VS 2015" ou "VS2015 x64 ferramentas nativas Prompt de comando" (provavelmente todos eles na mesma pasta).

Outras dicas

A resposta de Roger foi muito útil.

Eu tive um pouco de dificuldade de usá-lo, embora, e continuei recebendo o vermelho "O Windows não pode verificar o editor deste software de driver" diálogo de erro. A chave era para instalar o certificado raiz de teste com

certutil -addstore Root Demo_CA.cer

que a resposta de Roger não chegou a tampa.

Aqui está um arquivo de lote que funcionou para mim (com meu arquivo .inf, não incluídas). Ele mostra como fazer tudo do início ao fim, sem ferramentas GUI em tudo (Com exceção de algumas solicitações de senha).

REM Demo of signing a printer driver with a self-signed test certificate.
REM Run as administrator (else devcon won't be able to try installing the driver)
REM Use a single 'x' as the password for all certificates for simplicity.

PATH %PATH%;"c:\Program Files\Microsoft SDKs\Windows\v7.1\Bin";"c:\Program Files\Microsoft SDKs\Windows\v7.0\Bin";c:\WinDDK\7600.16385.1\bin\selfsign;c:\WinDDK\7600.16385.1\Tools\devcon\amd64

makecert -r -pe -n "CN=Demo_CA" -ss CA -sr CurrentUser ^
   -a sha256 -cy authority -sky signature ^
   -sv Demo_CA.pvk Demo_CA.cer

makecert -pe -n "CN=Demo_SPC" -a sha256 -cy end ^
   -sky signature ^
   -ic Demo_CA.cer -iv Demo_CA.pvk ^
   -sv Demo_SPC.pvk Demo_SPC.cer

pvk2pfx -pvk Demo_SPC.pvk -spc Demo_SPC.cer ^
   -pfx Demo_SPC.pfx ^
   -po x

inf2cat /drv:driver /os:XP_X86,Vista_X64,Vista_X86,7_X64,7_X86 /v

signtool sign /d "description" /du "www.yoyodyne.com" ^
   /f Demo_SPC.pfx ^
   /p x ^
   /v driver\demoprinter.cat

certutil -addstore Root Demo_CA.cer

rem Needs administrator. If this command works, the driver is properly signed.
devcon install driver\demoprinter.inf LPTENUM\Yoyodyne_IndustriesDemoPrinter_F84F

rem Now uninstall the test driver and certificate.
devcon remove driver\demoprinter.inf LPTENUM\Yoyodyne_IndustriesDemoPrinter_F84F

certutil -delstore Root Demo_CA

Tal como referido na resposta, a fim de usar uma forma não preterido para assinar seu próprio script, deve-se usar New-SelfSignedCertificate .

  1. Gerar a chave:
    New-SelfSignedCertificate -DnsName email@yourdomain.com -Type CodeSigning -CertStoreLocation cert:\CurrentUser\My

  2. Exportar o certificado sem a chave privada:
    Export-Certificate -Cert (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)[0] -FilePath code_signing.crt A [0] irá fazer este trabalho para casos em que você tem mais de um certificado ... Obviamente tornar o índice coincide com o certificado que você deseja usar ... ou usar uma forma de filtrado (por thumprint ou emissor).

  3. Import-lo como editor confiável
    Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\TrustedPublisher

  4. Import-lo como uma autoridade de certificação raiz.
    Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\Root

  5. Assine o script.
    Set-AuthenticodeSignature .\script.ps1 -Certificate (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)

Obviamente uma vez que você tenha configurado a chave, você pode simplesmente assinar quaisquer outros scripts com ele.
Você pode obter informações mais detalhadas e alguma ajuda de resolução de problemas este artigo .

A partir do PowerShell 4.0 (Windows 8.1 / Server 2012 R2 ) é possível fazer uma certificado no Windows sem makecert.exe .

Os comandos que você precisa são Nova SelfSignedCertificate e Export-PfxCertificate .

As instruções estão no Criando auto-assinado certificados com o PowerShell .

É bastante fácil usando o comando New-SelfSignedCertificate em PowerShell. Abrir PowerShell e executar estes 3 comandos.

1) Criar certificado :
$ Cert = New-SelfSignedCertificate -DnsName www.yourwebsite.com -Tipo codesigning -CertStoreLocation Cert: \ CurrentUser \ My

2) definir a senha para ele :
$ CertPassword = ConvertTo-SecureString -String "my_passowrd" -Force -AsPlainText

3) Export-lo :
Export-PfxCertificate -cert "cert: \ CurrentUser \ My \ $ ($ cert.Thumbprint)" -FilePath "d: \ selfsigncert.pfx" -Password $ CertPassword

Seu certificado selfsigncert.pfx será localizado @ D:/


Etapa opcional: Você também exigiria para adicionar senha do certificado para as variáveis ??de ambiente do sistema. fazê-lo digitando abaixo na cmd: setx CSC_KEY_PASSWORD "my_password"

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top