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

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

  •  01-07-2019
  •  | 
  •  

Question

Comment créer un certificat auto-signé pour la signature de code à l'aide d'outils du Kit de développement logiciel (SDK) Windows?

Était-ce utile?

La solution

Réponse mise à jour

Si vous utilisez les versions Windows suivantes ou ultérieures: Windows Server 2012, Windows Server 2012 R2 ou Windows 8.1, alors MakeCert est maintenant obsolète et Microsoft recommande d'utiliser l'applet de commande PowerShell New-SelfSignedCertificate .

Si vous utilisez une version plus ancienne telle que Windows 7, vous devrez vous en tenir à MakeCert ou à une autre solution. Certaines personnes suggèrent le Module Powershell d’infrastructure à clé publique (PSPKI) .

Réponse originale

Vous pouvez créer un certificat de signature de code auto-signé (SPC - Logiciel). Certificat d’éditeur ), je préfère effectuer les opérations suivantes:

Création d'une autorité de certification auto-signée

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

(^ = autoriser la ligne de commande du traitement par lots)

Ceci crée un certificat auto-signé (-r), avec une clé privée exportable (-pe). Il s'appelle "Mon CA" et doit être placé dans le magasin d'autorité de certification de l'utilisateur actuel. Nous utilisons l'algorithme SHA-256 . La clé est destinée à la signature (-sky).

La clé privée doit être stockée dans le fichier MyCA.pvk et le certificat dans le fichier MyCA.cer.

Importation du certificat de l'autorité de certification

Etant donné qu'il est inutile d'avoir un certificat d'autorité de certification si vous n'y faites pas confiance, vous devez l'importer dans le magasin de certificats Windows. Vous pouvez utiliser le composant logiciel enfichable Certificats MMC, mais à partir de la ligne de commande:

certutil -user -addstore Root MyCA.cer

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

C'est à peu près la même chose que ci-dessus, mais nous fournissons une clé d'émetteur et un certificat (les commutateurs -ic et -iv).

Nous voudrons également convertir le certificat et la clé dans un fichier PFX:

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

Si vous souhaitez protéger le fichier PFX, ajoutez le commutateur -po, sinon PVK2PFX crée un fichier PFX sans phrase secrète.

Utilisation du certificat pour la signature du code

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

( Découvrez pourquoi les horodatages peuvent avoir une importance )

Si vous importez le fichier PFX dans le magasin de certificats (vous pouvez utiliser PVKIMPRT ou le composant logiciel enfichable MMC), vous pouvez signer le code comme suit:

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

Certaines URL d'horodatage possibles pour signtool / t sont les suivantes:

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

Documentation Microsoft complète

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 actuel est disponible ici: SDK & amp; .NET (qui installe makecert dans C: \ Program Files \ Microsoft SDK \ Windows \ v7.1 ). Votre kilométrage peut varier.

MakeCert est disponible à partir de l’invite de commande Visual Studio. Visual Studio 2015 en est équipé et il peut être lancé à partir du menu Démarrer de Windows 7 sous "Invite de commandes du développeur pour VS 2015". ou " Invite de commande d'outils natifs VS2015 x64 " (probablement tous dans le même dossier).

Autres conseils

La réponse de Roger a été très utile.

Cependant, j’ai eu un peu de mal à l’utiliser et j’ai gardé le rouge "Windows ne peut pas vérifier l’éditeur de ce logiciel pilote". boîte de dialogue d'erreur. La clé consistait à installer le certificat racine de test avec

certutil -addstore Root Demo_CA.cer

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

Voici un fichier de commandes qui a fonctionné pour moi (avec mon fichier .inf, non inclus). Il montre comment faire tout cela du début à la fin, sans aucun outil graphique (à 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:\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

Comme indiqué dans la réponse, pour utiliser un moyen non obsolète de signer votre propre script, vous devez utiliser Nouveau-SelfSignedCertificate .

  1. Générez la clé:
    New-SelfSignedCertificate -DnsName email@votredomaine.com -Type CodeSigning -CertStoreLocation cert: \ CurrentUser \ My

  2. Exportez le certificat sans la clé privée:
    Export-Certificate -Cert (Certificat Get-ChildItem: \ CurrentUser \ My -CodeSigningCert) [0] -FilePath code_signing.crt Le [0] fera en sorte que cela fonctionne dans les cas où vous avez plus d'un certificat ... Faites évidemment en sorte que l'index corresponde au certificat que vous souhaitez utiliser ... ou utilisez un moyen de filtrer (par thumprint ou par émetteur).

  3. Importez-le en tant qu'éditeur de confiance
    Import-Certificate -FilePath. \ code_signing.crt -Cert Cert: \ CurrentUser \ TrustedPublisher

  4. Importez-le en tant qu'autorité de certification racine.
    Import-Certificate -FilePath. \ code_signing.crt -Cert Cert: \ CurrentUser \ Root

  5. Signez le script.
    Set-AuthenticodeSignature. \ script.ps1 -Certificate (Certificat Get-ChildItem: \ CurrentUser \ My -CodeSigningCert)

Évidemment, une fois la clé configurée, vous pouvez simplement signer tout autre script avec celle-ci.
Vous pouvez obtenir des informations plus détaillées et une aide au dépannage dans cet article .

À partir de PowerShell 4.0 (Windows 8.1 / Server 2012 R2), il est possible d'effectuer une certificat dans Windows sans makecert.exe .

Les commandes dont vous avez besoin sont New-SelfSignedCertificate et Export-PfxCertificate .

Les instructions sont dans Création de certificats autosignés avec PowerShell . .

C’est assez facile d’utiliser le Commande New-SelfSignedCertificate dans Powershell. Ouvrez powershell et exécutez ces 3 commandes.

  

1) Créer un certificat :
     $ cert = New-SelfSignedCertificate -DnsName www.votresiteweb.com   -Type CodeSigning -CertStoreLocation Cert: \ CurrentUser \ My

     

2) définissez le mot de passe correspondant :
  $ CertPassword = ConvertTo-SecureString   -String " my_passowrd " -Force & # 8211; AsPlainText

     

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

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

Étape facultative : vous devez également ajouter un mot de passe de certificat aux variables d'environnement du système. Pour ce faire, entrez ci-dessous dans cmd: setx CSC_KEY_PASSWORD " mot_de_passe_tour "

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top