Come posso creare un certificato autofirmato per la firma del codice su Windows?

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

  •  01-07-2019
  •  | 
  •  

Domanda

Come posso creare un certificato autofirmato per la firma del codice utilizzando gli strumenti di Windows SDK?

È stato utile?

Soluzione

Risposta aggiornata

Se utilizzi le seguenti versioni di Windows o successive:Windows Server 2012, Windows Server 2012 R2 o Windows 8.1 quindi MakeCert è ora deprecato, e Microsoft consiglia di utilizzare il cmdlet di PowerShell Nuovo-SelfSignedCertificate.

Se utilizzi una versione precedente come Windows 7, dovrai restare con MakeCert o un'altra soluzione.Alcune persone suggerire IL Modulo PSPKI (Public Key Infrastructure PowerShell)..

Risposta originale

Sebbene sia possibile creare un certificato di firma del codice autofirmato (SPC - Certificato di editore di software) in una volta sola, preferisco fare quanto segue:

Creazione di un'autorità di certificazione (CA) autofirmata

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

(^ = consenti alla riga di comando batch di racchiudere la riga)

Ciò crea un certificato autofirmato (-r), con una chiave privata esportabile (-pe).Si chiama "La mia CA" e dovrebbe essere inserito nell'archivio CA per l'utente corrente.Stiamo utilizzando il SHA-256 algoritmo.La chiave è destinata alla firma (-sky).

La chiave privata deve essere archiviata nel file MyCA.pvk e il certificato nel file MyCA.cer.

Importazione del certificato CA

Poiché non ha senso avere un certificato CA se non ti fidi, dovrai importarlo nell'archivio certificati di Windows.Voi Potere utilizzare lo snap-in MMC Certificati, ma dalla riga di comando:

certutil -user -addstore Root MyCA.cer

Creazione di un certificato di firma del codice (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 lo stesso di cui sopra, ma forniamo una chiave e un certificato dell'emittente (gli interruttori -ic e -iv).

Dovremo anche convertire il certificato e la chiave in un file PFX:

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

Se vuoi proteggere il file PFX, aggiungi l'opzione -po, altrimenti PVK2PFX crea un file PFX senza passphrase.

Utilizzo del certificato per la firma del codice

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

(Scopri perché i timestamp possono essere importanti)

Se importi il ​​file PFX nell'archivio certificati (puoi utilizzare PVKIMPRT o lo snap-in MMC), puoi firmare il codice come segue:

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

Alcuni possibili URL di timestamp per signtool /t Sono:

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

Documentazione Microsoft completa

Download

Per coloro che non sono sviluppatori .NET, sarà necessaria una copia di Windows SDK e .NET Framework.Un collegamento attuale è disponibile qui: SDK e .NET (che installa makecert in C:\Program Files\Microsoft SDKs\Windows\v7.1).Il tuo chilometraggio può variare.

MakeCert è disponibile dal prompt dei comandi di Visual Studio.Visual Studio 2015 ce l'ha e può essere avviato dal menu Start in Windows 7 in "Prompt dei comandi per sviluppatori per VS 2015" o "Prompt dei comandi degli strumenti nativi VS2015 x64" (probabilmente tutti nella stessa cartella).

Altri suggerimenti

La risposta di Roger è stata molto utile.

Tuttavia, ho avuto qualche problema nell'usarlo e continuavo a ricevere la finestra di dialogo di errore rossa "Windows non riesce a verificare l'autore del software del driver".La chiave era installare il certificato root di prova con

certutil -addstore Root Demo_CA.cer

che la risposta di Roger non ha coperto del tutto.

Ecco un file batch che ha funzionato per me (con il mio file .inf, non incluso).Mostra come fare tutto dall'inizio alla fine, senza strumenti GUI (tranne alcuni istruzioni di password).

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

Come affermato nella risposta, per utilizzare un modo non deprecato per firmare il proprio script, è necessario utilizzare Nuovo-SelfSignedCertificate.

  1. Genera la chiave:
    New-SelfSignedCertificate -DnsName email@yourdomain.com -Type CodeSigning -CertStoreLocation cert:\CurrentUser\My

  2. Esporta il certificato senza la chiave privata:
    Export-Certificate -Cert (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)[0] -FilePath code_signing.crt Lo [0] lo farà funzionare nei casi in cui hai più di un certificato...Ovviamente fai in modo che l'indice corrisponda al certificato che desideri utilizzare...oppure utilizzare un metodo di filtraggio (per thumprint o emittente).

  3. Importalo come editore attendibile
    Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\TrustedPublisher

  4. Importalo come autorità di certificazione radice.
    Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\Root

  5. Firma la sceneggiatura.
    Set-AuthenticodeSignature .\script.ps1 -Certificate (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)

Ovviamente una volta impostata la chiave, potrete semplicemente firmare con essa eventuali altri script.
È possibile ottenere informazioni più dettagliate e aiuto per la risoluzione dei problemi in Questo articolo.

A partire da PowerShell 4.0 (Windows 8.1/Server2012 R2) è possibile creare un certificato in Windows senza makecert.exe.

I comandi di cui hai bisogno sono Nuovo-SelfSignedCertificate E Certificato Export-Pfx.

Le istruzioni sono arrivate Creazione di certificati autofirmati con PowerShell.

È abbastanza facile usare il file Nuovo-SelfSignedCertificate comando in PowerShell.Apri PowerShell ed esegui questi 3 comandi.

1) Crea certificato:
$ cert = new -SelfsignEdCertificate -dnsname www.yourwebsite.com -Type CodEsigning -CertStoreLocation Cert: CurrentUser my

2) impostarne la password:
$ Certpassword = converttto -securestring -string "my_papawrd" -force –asplaintext

3) Esportalo:
Export -PfxCertificate -Cert "Cert: CurrentUser my $ ($ cert.thumbprint)" -filePath "D: selfsigncert.pfx" -Password $ certpassword

Il tuo certificato selfsigncert.pfx si troverà @ D:/


Passaggio facoltativo: Dovresti anche aggiungere la password del certificato alle variabili di ambiente del sistema.fallo inserendo di seguito in cmd: setx CSC_KEY_PASSWORD "my_password"

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top