Wie erstelle ich ein selbstsigniertes Zertifikat für die Codesignatur mit Tools aus dem Windows SDK?
security
code-signing
Roger Lipscombe
quelle
quelle
Antworten:
Aktualisierte Antwort
Wenn Sie die folgenden Windows-Versionen oder höher verwenden: Windows Server 2012, Windows Server 2012 R2 oder Windows 8.1, ist MakeCert jetzt veraltet , und Microsoft empfiehlt die Verwendung des PowerShell-Cmdlets 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 PSPKI-Modul (Public Key Infrastructure Powershell) vor .
Ursprüngliche Antwort
Sie können zwar auf einmal ein selbstsigniertes Codesignaturzertifikat (SPC - Software Publisher Certificate ) erstellen , ich bevorzuge jedoch Folgendes:
Erstellen einer selbstsignierten Zertifizierungsstelle (CA)
(^ = Batch-Befehlszeile zum Zeilenumbruch zulassen)
Dadurch wird ein selbstsigniertes (-r) Zertifikat mit einem exportierbaren privaten Schlüssel (-pe) erstellt. Es heißt "Meine Zertifizierungsstelle" und sollte für den aktuellen Benutzer im Zertifizierungsstellenspeicher 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 das MMC-Snapin "Zertifikate" verwenden, jedoch über die Befehlszeile:
Erstellen eines Codesignaturzertifikats (SPC)
Es ist so ziemlich das gleiche wie oben, aber wir stellen einen Ausstellerschlüssel und ein Zertifikat bereit (die Schalter -ic und -iv).
Wir möchten auch das Zertifikat und den Schlüssel in eine PFX-Datei konvertieren:
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
( Sehen Sie, warum Zeitstempel wichtig sein können )
Wenn Sie die PFX-Datei in den Zertifikatspeicher importieren (Sie können PVKIMPRT oder das MMC-Snapin verwenden), können Sie den Code wie folgt signieren:
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 .NET-Frameworks. Ein aktueller Link ist hier verfügbar: SDK & .NET (das makecert installiert
C:\Program Files\Microsoft SDKs\Windows\v7.1
). Ihr Kilometerstand kann variieren.MakeCert ist über die 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 VS2015 x64 Native Tools" (wahrscheinlich alle im selben Ordner) gestartet werden.
quelle
E=your@email
. ZB:makecert -pe -n "CN=My SPC,E=email@domain" ........
-eku 1.3.6.1.5.5.7.3.3
Benötigen Sie nicht das Schlüsselflag "Erweiterte Verwendung", damit das Zertifikat für die Codesignatur verwendet werden kann (ich weiß, dass Powershell keine Skripte signiert, wenn es fehlt)Wie in der Antwort angegeben, sollte New-SelfSignedCertificate verwendet werden, um Ihr eigenes Skript auf nicht veraltete Weise zu signieren .
Mit [0] funktioniert dies in Fällen, in denen Sie mehr als ein Zertifikat haben ... Stellen Sie sicher, dass der Index mit dem Zertifikat übereinstimmt, das Sie verwenden möchten ... oder filtern Sie (nach Thumprint oder Aussteller).
Sobald Sie den Schlüssel eingerichtet haben, können Sie natürlich auch andere Skripte damit signieren.
In diesem Artikel finden Sie detailliertere Informationen und Hilfe zur Fehlerbehebung .
quelle
(get-ChildItem ...)
Rückgabe von mehr als einem Zertifikat habe ich am Ende "[0]" gesetzt und es hat funktioniert. Wie inExport-Certificate -Cert (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)[0] -FilePath code_signing.crt
Rogers Antwort war sehr hilfreich.
Ich hatte jedoch ein kleines Problem damit und bekam immer wieder das rote Fehlerdialogfeld "Windows kann den Herausgeber dieser Treibersoftware nicht überprüfen". Der Schlüssel war, das Teststammzertifikat mit zu installieren
was Rogers Antwort nicht ganz abdeckte.
Hier ist eine Batch-Datei, die für mich funktioniert hat (mit meiner .inf-Datei, nicht enthalten). Es zeigt, wie alles von Anfang bis Ende ohne GUI-Tools ausgeführt wird (mit Ausnahme einiger Kennwortabfragen).
quelle
Mit dem Befehl New-SelfSignedCertificate in Powershell ist das ziemlich einfach . Öffnen Sie die Powershell und führen Sie diese 3 Befehle aus.
Ihr Zertifikat selfsigncert.pfx befindet sich @
D:/
Optionaler Schritt: Sie müssten außerdem Systemumgebungsvariablen ein Zertifikatkennwort hinzufügen. Geben Sie dazu unten in cmd Folgendes ein:
setx CSC_KEY_PASSWORD "my_password"
quelle
Ab PowerShell 4.0 (Windows 8.1 / Server 2012 R2) ist es möglich, ein Zertifikat in Windows ohne makecert.exe zu erstellen .
Die Befehle, die Sie benötigen, sind New-SelfSignedCertificate und Export-PfxCertificate .
Anweisungen finden Sie unter Erstellen selbstsignierter Zertifikate mit PowerShell .
quelle