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?
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).
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
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.
Como indicado na resposta, para usar uma forma não depreciada de assinar o seu próprio script, deve-se usar O novo Autocertificado.
Gerar a chave:
New-SelfSignedCertificate -DnsName [email protected] -Type CodeSigning -CertStoreLocation cert:\CurrentUser\My
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).Importá-lo como editor de confiança
Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\TrustedPublisher
Importá-lo como uma autoridade de Certificado de raiz.
Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\Root
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 .