Comment créer un certificat auto-signé pour la signature de code sur Windows?

comment créer un certificat auto-signé pour la signature de code à l'aide des outils du SDK Windows?

185
demandé sur Roger Lipscombe 2008-09-17 20:04:07

5 réponses

Réponse Mise À Jour

si vous utilisez les versions suivantes de Windows ou une version ultérieure: Windows Server 2012, Windows Server 2012 R2, ou Windows 8.1 alors MakeCert est maintenant déprécié , et Microsoft recommande d'utiliser le Cmdlet PowerShell nouveau certificat autosigné .

si vous utilisez une ancienne version comme Windows 7, vous devrez vous en tenir à MakeCert ou l'autre solution. Certaines personnes suggèrent le Module D'infrastructure à clé publique Powershell (PSPKI) .

Réponse Originale

alors que vous pouvez créer un code auto-signé-certificat de signature (SPC - certificat D'éditeur de logiciel ) en une seule fois, je préfère faire ce qui suit:

la Création d'un certificat auto-signé de l'autorité de certification (CA)

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

(^ = autoriser lot de la ligne de commande pour envelopper ligne)

cela crée un certificat auto-signé (-r), avec une clé privée exportable (-pe). Il s'appelle "My CA", et devrait être mis dans le magasin CA pour l'utilisateur courant. Nous utilisons l'algorithme SHA-256 . La clé est destinée à la signature (le ciel).

la clé privée doit être conservée dans le MyCA.pvk file, et le certificat dans le MyCA.fichier cer.

Importer le certificat d'autorité de certification

comme il ne sert à rien d'avoir un certificat de L'AC si vous n'y croyez pas, vous devrez l'importer dans la boutique de certificats Windows. Vous peut utiliser les certificats MMC snapin, mais à partir de la ligne de commande:

certutil -user -addstore Root MyCA.cer

la Création d'un certificat de signature de code (SPC)

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

il est à peu près le même que ci-dessus, mais nous fournissons un clé de l'émetteur et certificat (commutateurs-ic et-iv).

nous voulons aussi convertir le certificat et la clé en un fichier PFX:

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

si vous voulez protéger le fichier PFX, ajoutez le commutateur-po, sinon PVK2PFX crée un fichier PFX sans mot de passe.

utilisant le certificat pour le code de signature

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

( Voir pourquoi les horodatages l'importance de la )

si vous importez le fichier PFX dans le magasin de certificats (vous pouvez utiliser PVKIMPRT ou le snapin MMC), vous pouvez signer le code comme suit:

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

quelques URLs timestamp possibles pour signtool /t sont:

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

Complète la documentation de Microsoft

téléchargements

pour ceux qui ne sont pas des développeurs.Net, vous aurez besoin d'une copie du SDK Windows et du framework. net. Un lien courant est disponible ici: SDK & .NET (qui installe makecert dans C:\Program Files\Microsoft SDKs\Windows\v7.1 ). Votre kilométrage peut varier.

MakeCert est disponible à L'invite de commande Visual Studio. Visual Studio 2015 ne l'a pas, et il peut être lancé à partir du Menu Démarrer dans Windows 7 sous "Developer Command Prompt for VS 2015" ou "VS2015 x64 Native Tools Command Prompt" (probablement tous dans le même dossier).

323
répondu Roger Lipscombe 2018-08-09 18:33:57

la réponse de Roger fut très utile.

j'ai eu un peu de mal à l'utiliser, cependant, et j'ai continué à obtenir le dialogue d'erreur rouge" Windows ne peut pas vérifier l'éditeur de ce logiciel de pilote". La clé était d'installer le certificat de base de test avec

certutil -addstore Root Demo_CA.cer

que la réponse de Roger n'a pas tout à fait couvert.

voici un fichier batch qui a fonctionné pour moi (avec mon .fichier inf, non inclus). Il montre comment tout faire du début à la finition, sans aucun outil GUI (à l'exception de quelques invites de mot de passe).

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:\WinDDK00.16385.1\bin\selfsign;c:\WinDDK00.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
répondu Dan Kegel 2016-05-18 08:39:12

à partir de PowerShell 4.0 (Windows 8.1/ Server 2012 R2) il est possible de faire un certificat dans Windows sans makecert.exe .

les commandes dont vous avez besoin sont New-self -signedcertificate et Export-PfxCertificate .

les Instructions sont en Créer les Certificats Auto-Signés avec PowerShell .

11
répondu Yishai 2016-05-18 08:40:59

c'est assez facile d'utiliser la commande nouveau certificat autosigné dans Powershell. Ouvrez powershell et exécutez ces 3 commandes.

1) créer le certificat :

$cert = New-SelfSignedCertificate -DnsName www.yourwebsite.com -Type CodeSigning-CertStoreLocation Cert: \ CurrentUser\My

2) définir le mot de passe pour lui :

$CertPassword = ConvertTo-SecureString - String "my_passowrd" –Force-AsPlainText

3) Exporter :

L'exportation PfxCertificate -Cert cert:\CurrentUser\Mon\$($cert.Empreinte numérique)" -Chemin d'accès "d:\selfsigncert.pfx "- mot de passe $CertPassword

votre certificat selfsigncert.pfx sera situé @ D:/


étape facultative: vous devez également ajouter le mot de passe du certificat aux variables d'environnement du système. pour ce faire, Inscrivez ci-dessous dans cmd: setx CSC_KEY_PASSWORD "my_password"

8
répondu JerryGoyal 2018-09-23 13:20:54

comme indiqué dans la réponse, afin d'utiliser une façon non dépréciée de signer votre propre script, on devrait utiliser Nouveau-autosigné certificat .

  1. Générer la clé:

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

  2. exporter le certificat sans la clé privée:

    Export-Certificate -Cert (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)[0] -FilePath code_signing.crt [0] fera ce travail pour les cas où vous avez plus d'un certificat... Évidemment, faites que l'index corresponde au certificat que vous voulez utiliser... ou utiliser un moyen de filtrer (par thumprint ou émetteur).

  3. l'Importer en tant qu'Éditeur de Confiance

    Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\TrustedPublisher

  4. L'Importer à titre d'autorité de certification racine.

    Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\Root

  5. signe le script.

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

évidemment une fois que vous avez configuré la clé, vous pouvez simplement signer tous les autres scripts avec elle.

Vous pouvez obtenir des informations plus détaillées et de l'aide pour résoudre les problèmes dans cet article .

5
répondu chaami 2018-09-08 05:55:48