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?
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).
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
à 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 .
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\My2) définir le mot de passe pour lui :
$CertPassword = ConvertTo-SecureString - String "my_passowrd" –Force-AsPlainText3) 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"
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 .
-
Générer la clé:
New-SelfSignedCertificate -DnsName email@yourdomain.com -Type CodeSigning -CertStoreLocation cert:\CurrentUser\My
-
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). -
l'Importer en tant qu'Éditeur de Confiance
Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\TrustedPublisher
-
L'Importer à titre d'autorité de certification racine.
Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\Root
-
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 .