292 votes

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

Comment créer un certificat auto-signé pour la signature de code en utilisant les outils du SDK Windows ?

2 votes

Cochez cette réponse : stackoverflow.com/q/53771022/623913

412voto

Roger Lipscombe Points 34344

Réponse actualisée

Si vous utilisez les versions suivantes de Windows ou des versions ultérieures : Windows Server 2012, Windows Server 2012 R2, ou Windows 8.1, alors MakeCert est maintenant déprécié et Microsoft recommande d'utiliser la cmdlet PowerShell Nouveau certificat auto-signé .

Si vous utilisez une version plus ancienne, comme Windows 7, vous devrez vous en tenir à MakeCert ou à une autre solution. Certaines personnes suggérer le site Module Powershell d'infrastructure à clé publique (PSPKI) .

Réponse originale

Bien que vous puissiez créer un certificat de signature de code auto-signé (SPC - Certificat d'éditeur de logiciels ) en une seule fois, je préfère procéder comme suit :

Création d'une autorité de certification (CA) 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

(^ = permet à la ligne de commande batch d'envelopper la ligne)

Ceci crée un certificat auto-signé (-r), avec une clé privée exportable (-pe). Il est nommé "My CA", et doit être placé dans le magasin CA pour l'utilisateur actuel. Nous utilisons l'option SHA-256 algorithme. 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'AC

Comme il est inutile d'avoir un certificat d'autorité de certification si vous ne lui faites pas confiance, vous devez l'importer dans le magasin de certificats de Windows. Vous pouvez consulter le site peut utiliser le snapin MMC Certificats, 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é et un certificat d'émetteur (les commutateurs -ic et -iv).

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

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

Si vous utilisez un mot de passe, veuillez utiliser le code suivant

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

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

Utilisation du certificat pour la signature du code

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

( Voir pourquoi les timestamps peuvent avoir de l'importance )

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 URL d'horodatage possibles pour signtool /t sont :

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

Documentation complète 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 cadre .NET. Un lien actuel est disponible ici : [SDK & .NET][5] (qui installe makecert dans le répertoire `NET'). C:\Program Fichiers \Microsoft SDKs \Windows\v7.1 `). Votre kilométrage peut varier.

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

0 votes

Y a-t-il un moyen de remplir le champ de l'adresse électronique du certificat en utilisant cette méthode ? Un clic droit sur exe>Propriétés>Signatures numériques indique que l'adresse électronique est "non disponible" après la signature.

0 votes

Si vous obtenez l'erreur "trop de paramètres", vérifiez que vous n'avez pas supprimé accidentellement l'un des traits d'union. Si ce n'est pas le cas, retapez les traits d'union - ne faites pas de copier-coller.

9 votes

@cronoklee Pour remplir le champ email du certificat, il suffit d'ajouter E=your@email . Eg : makecert -pe -n "CN=My SPC,E=email@domain" ........

107voto

chaami Points 179

Comme indiqué dans la réponse, afin d'utiliser une méthode non dépréciée pour signer votre propre script, il faut utiliser Nouveau certificat auto-signé .

  1. Générer la clé :

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

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

    Export-Certificate -Cert (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)[0] -FilePath code_signing.crt

Le [0] permet de faire fonctionner le système dans le cas où vous avez plus d'un certificat... Évidemment, faites en sorte que l'index corresponde au certificat que vous voulez utiliser... ou utilisez un moyen de filtrer (par empreinte ou par émetteur).

  1. Importez-le en tant qu'éditeur de confiance

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

  2. Importez-le comme autorité de certification racine.

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

  3. Signez le script (en supposant qu'ici il est nommé script.ps1, fixez le chemin en conséquence).

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

Évidemment, une fois que vous avez configuré la clé, vous pouvez simplement signer tout autre script avec elle.
Vous pouvez obtenir des informations plus détaillées et une aide au dépannage en consultant le site suivant cet article .

40voto

JerryGoyal Points 9110

C'est assez facile en utilisant le Nouveau certificat auto-signé dans Powershell. Ouvrez Powershell et exécutez ces 3 commandes.

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

2) définir le mot de passe :
$CertPassword = ConvertTo-SecureString -String "mon_mot_de_passe" -Force -AsPlainText

3) L'exporter :
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 le mot de passe du certificat aux variables d'environnement du système. Pour ce faire, entrez le code suivant dans cmd : setx CSC_KEY_PASSWORD "my_password"

22voto

user1539692 Points 61

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

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

certutil -addstore Root Demo_CA.cer

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

Voici un fichier batch 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 GUI. (sauf pour 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

4 votes

Si vous voulez l'utiliser pour signer des pilotes, vous devez importer le certificat de l'autorité de certification dans le magasin de la machine. Mon exemple l'importe dans le magasin de l'utilisateur, ce qui convient à la plupart des logiciels, à des fins de test ou internes.

14voto

Yishai Points 42417

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

Les commandes dont vous avez besoin sont Nouveau certificat auto-signé et Export-PfxCertificate .

Les instructions sont dans Création de certificats auto-signés avec PowerShell .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X