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

Comment créer un certificate auto-signé pour la signature de code à l’aide des outils du kit de développement Windows?

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, MakeCert est désormais obsolète , et Microsoft vous recommande d’utiliser PowerShell Cmdlet 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 PSPKI (Public Key Infrastructure Powershell) .

Réponse originale

Bien que vous puissiez créer un certificate de signature de code auto-signé (SPC – Software Publisher Certificate ) en une seule fois, je préfère effectuer les opérations suivantes:

Création d’une autorité de certificateion 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 par lots à envelopper la ligne)

Cela crée un certificate auto-signé (-r), avec une clé privée exportable (-pe). Il s’appelle “Mon CA” et doit être placé dans la banque CA pour 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 certificate dans le fichier MyCA.cer.

Importation du certificate de l’autorité de certificateion

Comme il est inutile d’avoir un certificate de CA si vous ne le faites pas, vous devrez l’importer dans le magasin de certificates Windows. Vous pouvez utiliser le snapin MMC Certificats, mais à partir de la ligne de commande:

 certutil -user -addstore Root MyCA.cer 

Création d’un certificate 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é et un certificate d’émetteur (les commutateurs -ic et -iv).

Nous souhaitons également convertir le certificate 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 paramètre -po, sinon PVK2PFX crée un fichier PFX sans phrase secrète.

Utiliser le certificate pour signer le code

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

( Voir pourquoi les horodatages peuvent avoir de l’importance )

Si vous importez le fichier PFX dans le magasin de certificates (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 

Voici quelques URL d’horodatage possibles pour signtool /t :

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

Documentation complète de Microsoft

  • outil de signalisation
  • makecert
  • pvk2pfx

Téléchargements

Pour ceux qui ne sont pas des développeurs .NET, vous aurez besoin d’une copie du framework Windows SDK et .NET. Un lien actuel 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 à partir de l’invite de commandes Visual Studio. Visual Studio 2015 en est doté, et il peut être lancé à partir du menu Démarrer de Windows 7 sous “Invite de commande du développeur pour VS 2015” ou “Invite de commande des outils natifs VS2015 x64” (probablement tous dans le même dossier).

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

J’ai eu un peu de mal à l’utiliser, cependant, et j’ai continué à lire le message d’erreur “Windows ne peut pas vérifier l’éditeur de ce pilote”. La clé était d’installer le certificate racine de test avec

 certutil -addstore Root Demo_CA.cer 

dont la réponse de Roger ne couvrait pas tout à fait.

Voici un fichier de commandes qui a fonctionné pour moi (avec mon fichier .inf, non inclus). Il montre comment tout faire du début à la fin, sans aucun outil graphique (sauf pour quelques invites de mot de passe).

 REM Demo of signing a printer driver with a self-signed test certificatee. 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 certificatees 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 ^ /px ^ /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_IndussortingesDemoPrinter_F84F rem Now uninstall the test driver and certificatee. devcon remove driver\demoprinter.inf LPTENUM\Yoyodyne_IndussortingesDemoPrinter_F84F certutil -delstore Root Demo_CA 

À partir de PowerShell 4.0 (Windows 8.1 / Server 2012 R2), il est possible de créer un certificate sous Windows sans makecert.exe .

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

Les instructions sont dans la création de certificates auto-signés avec PowerShell .

C’est assez facile en utilisant la commande New-SelfSignedCertificate dans Powershell. Ouvrez powershell et lancez ces 3 commandes.

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

2) définir le mot de passe pour cela :
$ CertPassword = ConvertTo-SecureSsortingng -Ssortingng “my_passowrd” -Force –AsPlainText

3) l’ exporter :
Export-PfxCertificate -Cert “cert: \ CurrentUser \ Mon \ $ ($ cert.Thumbprint)” -FilePath “d: \ testcert.pfx” -Password $ CertPassword

Votre certificate testcert.pfx sera situé à @ D:/

Comme indiqué dans la réponse, pour utiliser une manière non déconseillée de signer votre propre script, vous devez utiliser New-SelfSignedCertificate .

  1. Générez la clé:
    New-SelfSignedCertificate -DnsName [email protected] -Type CodeSigning -CertStoreLocation cert:\CurrentUser\My

  2. Exportez le certificate sans la clé privée:
    Export-Certificate -Cert (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert) -FilePath code_signing.crt

  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 certificateion racine.
    Import-Certifiate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\Root

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

De toute évidence, une fois la clé configurée, vous pouvez simplement signer tout autre script.
Vous pouvez obtenir des informations plus détaillées et une aide au dépannage dans cet article .