it-swarm-eu.dev

Wie erstelle ich ein selbstsigniertes Zertifikat für die Codesignatur unter Windows?

Wie erstelle ich ein selbstsigniertes Zertifikat für die Codesignatur mit Tools aus dem Windows SDK?

204
Roger Lipscombe

Aktualisierte Antwort

Wenn Sie die folgenden Windows-Versionen oder höher verwenden: Windows Server 2012, Windows Server 2012 R2 oder Windows 8.1, dann ist MakeCert jetzt veraltet und Microsoft empfiehlt die Verwendung von das PowerShell-Cmdlet New-SelfSignedCertificate .

Wenn Sie eine ältere Version wie Windows 7 verwenden, müssen Sie sich an MakeCert oder eine andere Lösung halten. Einige Leute schlagen das Public Key Infrastructure Powershell (PSPKI) -Modul vor.

Ursprüngliche Antwort

Sie können zwar gleichzeitig ein selbstsigniertes Code-Signatur-Zertifikat (SPC - Software Publisher Certificate ) erstellen, aber ich bevorzuge Folgendes:

Selbstsignierte Zertifizierungsstelle erstellen

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

(^ = Batch-Kommandozeile umbrechen lassen)

Dadurch wird ein selbstsigniertes (-r) Zertifikat mit einem exportierbaren privaten Schlüssel (-pe) erstellt. Es heißt "Meine CA" und sollte für den aktuellen Benutzer im CA-Speicher abgelegt werden. Wir verwenden den SHA-256 Algorithmus. Der Schlüssel ist zum Signieren gedacht (-sky).

Der private Schlüssel sollte in der Datei MyCA.pvk und das Zertifikat in der Datei MyCA.cer gespeichert sein.

CA-Zertifikat importieren

Da es keinen Sinn macht, ein CA-Zertifikat zu haben, wenn Sie ihm nicht vertrauen, müssen Sie es in den Windows-Zertifikatspeicher importieren. Sie können can das Zertifikat MMC snapin, aber von der Kommandozeile aus:

certutil -user -addstore Root MyCA.cer

Code-Signing-Zertifikat (SPC) erstellen

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

Es ist so ziemlich dasselbe wie oben, aber wir stellen einen Ausstellerschlüssel und ein Zertifikat zur Verfügung (die Schalter -ic und -iv).

Wir werden auch das Zertifikat und den Schlüssel in eine PFX-Datei konvertieren wollen:

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

Wenn Sie die PFX-Datei schützen möchten, fügen Sie den Schalter -po hinzu. Andernfalls erstellt PVK2PFX eine PFX-Datei ohne Passphrase.

Verwenden des Zertifikats zum Signieren des Codes

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

( Sehen Sie, warum Zeitstempel wichtig sein können )

Wenn Sie die PFX-Datei in den Zertifikatspeicher importieren (Sie können PVKIMPRT oder das Snapin MMC) verwenden), können Sie den Code wie folgt signieren:

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

Einige mögliche Zeitstempel-URLs für signtool /t sind:

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

Vollständige Microsoft-Dokumentation

Downloads

Für diejenigen, die keine .NET-Entwickler sind, benötigen Sie eine Kopie des Windows SDK und des .NET-Frameworks. Ein aktueller Link ist hier verfügbar: SDK & .NET (installiert makecert in C:\Program Files\Microsoft SDKs\Windows\v7.1). Ihr Kilometerstand kann variieren.

MakeCert ist in der Visual Studio-Eingabeaufforderung verfügbar. Visual Studio 2015 hat es und kann über das Startmenü in Windows 7 unter "Eingabeaufforderung für Entwickler für VS 2015" oder "Eingabeaufforderung für native VS2015-Tools x64" (wahrscheinlich alle im selben Ordner) gestartet werden.

344
Roger Lipscombe

Rogers Antwort war sehr hilfreich.

Ich hatte jedoch ein kleines Problem mit der Verwendung und bekam immer wieder den roten Fehlerdialog "Windows kann den Herausgeber dieser Treibersoftware nicht überprüfen". Der Schlüssel war, das Teststammzertifikat mit zu installieren

certutil -addstore Root Demo_CA.cer

was Rogers Antwort nicht ganz deckte.

Hier ist eine Batch-Datei, die für mich funktioniert hat (mit meiner INF-Datei, nicht enthalten). Es wird gezeigt, wie alles von Anfang bis Ende ohne GUI-Tools ausgeführt wird (mit Ausnahme einiger Passwortabfragen).

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
19
Dan Kegel

Wie in der Antwort angegeben, sollte New-SelfSignedCertificate verwendet werden, um Ihr eigenes Skript auf nicht veraltete Weise zu signieren.

  1. Generieren Sie den Schlüssel:
    New-SelfSignedCertificate -DnsName [email protected] -Type CodeSigning -CertStoreLocation cert:\CurrentUser\My

  2. Exportieren Sie das Zertifikat ohne den privaten Schlüssel:
    Export-Certificate -Cert (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)[0] -FilePath code_signing.crt Mit [0] funktioniert dies für Fälle, in denen Sie mehr als ein Zertifikat haben ... Offensichtlich muss der Index mit dem Zertifikat übereinstimmen, das Sie verwenden möchten ... oder auf eine Weise zu filtrieren (nach Thumprint oder Aussteller).

  3. Importieren Sie es als Trusted Publisher
    Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\TrustedPublisher

  4. Importieren Sie es als Stammzertifizierungsstelle.
    Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\Root

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

Sobald Sie den Schlüssel eingerichtet haben, können Sie natürlich auch andere Skripte damit signieren.
Ausführlichere Informationen und Hilfe zur Fehlerbehebung finden Sie in in diesem Artikel .

14
chaami

Ab PowerShell 4.0 (Windows 8.1/ Server 2012 R2) ist es möglich, unter Windows ein Zertifikat ohne makecert.exe zu erstellen.

Die Befehle, die Sie benötigen, sind New-SelfSignedCertificate und Export-PfxCertificate .

Anweisungen finden Sie in Selbstsignierte Zertifikate mit PowerShell erstellen.

12
Yishai

Mit dem Befehl New-SelfSignedCertificate in Powershell ist das ziemlich einfach. Öffne Powershell und führe diese 3 Befehle aus.

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

2) setze das Passwort dafür :
$ CertPassword = ConvertTo-SecureString -String "my_passowrd" -Force –AsPlainText

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

Ihr Zertifikat selfsigncert.pfx befindet sich unter @ D:/


Optionaler Schritt: Außerdem müssen Sie Systemumgebungsvariablen ein Zertifikatkennwort hinzufügen. Geben Sie dazu Folgendes in cmd ein: setx CSC_KEY_PASSWORD "my_password"

12
JerryGoyal