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

como é que eu crio um certificado auto-assinado para a assinatura de código usando ferramentas do SDK do Windows?

Author: Roger Lipscombe, 2008-09-17

5 answers

Resposta Actualizada

Se estiver a usar as seguintes versões do Windows ou posteriores: Windows Server 2012, Windows Server 2012 R2, ou Windows 8.1 então MakeCert está agora desactualizado , e a Microsoft recomenda a utilização de o PowerShell Cmdlet .

Se estiver a usar uma versão mais antiga como o Windows 7, terá de ficar com o MakeCert ou outra solução. Algumas pessoas sugerem a infra-estrutura de chave pública Módulo Powershell (PSPKI) .

Resposta Original

Embora possa criar um certificado de assinatura de código autossignado (SPC - } software Publisher Certificate) de uma só vez, prefiro fazer o seguinte:

Criação de uma autoridade de certificação autoproclamada (CA)

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

(^=permitir que a linha de comandos do lote embrulhe a linha)

Isto cria um certificado autossignado (- r), com uma chave privada exportável (-pe). Chama-se "meu CA", e deve ser colocado no CA guardar para o utilizador actual. Estamos a usar o algoritmo de SHA-256. A chave é para assinar (- sky).

A chave privada deve ser guardada na MyCA.ficheiro pvk, e o certificado na MyCA.ficheiro cer.

Importar o certificado da AC

Porque não vale a pena ter um certificado de AC se não confiar Nele, terá de o Importar para a Loja de certificados do Windows. Você pode usar os certificados MMC snapin, mas a partir do comando linha:
certutil -user -addstore Root MyCA.cer

Criação de um certificado de assinatura de código (RCM)

makecert -pe -n "CN=My SPC" -a sha256 -cy end ^
         -sky signature ^
         -ic MyCA.cer -iv MyCA.pvk ^
         -sv MySPC.pvk MySPC.cer
É praticamente igual ao acima, mas estamos a fornecer uma chave e um certificado de emissor (os interruptores-ic e-iv).

Também queremos converter o certificado e a chave num ficheiro PFX:

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

Se quiser proteger o ficheiro PFX, adicione o botão-po, caso contrário o PVK2PFX cria um ficheiro PFX sem frase-senha.

Usar o certificado para assinar código

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

(ver porque é que as datas podem importar)

Se importar o ficheiro PFX para o armazém de certificados( poderá usar o PVKIMPRT ou o MMC snapin), poderá assinar o código da seguinte forma:

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

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

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

Full Microsoft documentação

Downloads

Para aqueles que não são programadores.NET, você vai precisar de uma cópia do framework SDK e .net. Está disponível aqui uma ligação actual: SDK&. net (que instala o makecert em C:\Program Files\Microsoft SDKs\Windows\v7.1). A sua quilometragem pode variar.

O MakeCert está disponível no comando Visual Studio. Visual Studio 2015 tem, e pode ser lançado a partir do Menu Iniciar no Windows 7 sob "linha de comandos de desenvolvimento para VS 2015" ou "linha de comandos de ferramentas nativas VS2015 x64" (provavelmente todos eles na mesma pasta).

 323
Author: Roger Lipscombe, 2018-08-09 18:33:57
A resposta do Roger foi muito útil.

Tive um pequeno problema em usá-lo, no entanto, e continuou a obter o vermelho "Windows não pode verificar o editor deste driver software" janela de erro. A chave era instalar o certificado de raiz de teste com

certutil -addstore Root Demo_CA.cer
Que a resposta do Roger não cobriu. Aqui está um arquivo de lote que funcionou para mim (com o meu .ficheiro inf, não incluído). Ele mostra como fazer tudo do início ao fim, sem ferramentas GUI em tudo (excepto para algumas senhas instrucao).
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
 16
Author: Dan Kegel, 2016-05-18 08:39:12

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

Os comandos de que necessita são O novo certificado auto-assinado e Export-PfxCertificate.

As instruções estão dentro criar certificados auto-assinados com o PowerShell.

 11
Author: Yishai, 2016-05-18 08:40:59

Como indicado na resposta, para usar uma forma não depreciada de assinar o seu próprio script, deve-se usar O novo Autocertificado.

  1. Gerar a chave:
    New-SelfSignedCertificate -DnsName [email protected] -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 O [0] fará com que isso funcione para casos em que você tem mais de um certificado... Obviamente, faça o índice corresponder ao certificado que deseja usar... ou usar uma forma de filtrar (por thumprint ou emitente).

  3. Importá-lo como editor de confiança
    Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\TrustedPublisher

  4. Importá-lo como uma autoridade de Certificado de raiz.
    Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\Root

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

Obviamente, uma vez que você tenha configurado a chave, você pode simplesmente assinar qualquer outro scripts com ela.
Você pode obter informações mais detalhadas e alguma ajuda para solucionar problemas neste artigo .

 5
Author: chaami, 2018-09-08 05:55:48