Wie erstelle ich ein selbst signiertes Zertifikat für Code unter Windows Wenn Sie sich?

StackOverflow https://stackoverflow.com/questions/84847

  •  01-07-2019
  •  | 
  •  

Frage

Wie kann ich ein selbst signiertes Zertifikat für die Codesignatur mit Werkzeugen aus dem Windows SDK erstellen?

War es hilfreich?

Lösung

aktualisiert Antwort

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

Wenn Sie eine ältere Version wie Windows 7, werden Sie mit MakeCert oder einer anderen Lösung haften müssen. Einige Leute vorschlagen der Public Key Infrastructure Powershell (PSPKI) Modul .

Original Antwort

Während Sie ein selbst signiertes Codesignaturzertifikat erstellen (SPC - Software Publisher Certificate ) in einem Rutsch, ziehe ich folgendes zu tun:

Erstellen eine selbstsignierten Zertifizierungsstelle (CA)

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

(^ = Batch-Befehlszeile erlauben Zeile umbrochen)

Dies erzeugt ein selbst signiertes (-r) Zertifikat, mit einem exportierbaren privaten Schlüssel (-pe). Es heißt „My CA“, benannt und soll für den aktuellen Benutzer in dem CA-Speicher gesetzt werden. Wir verwenden die SHA-256 Algorithmus . Der Schlüssel soll für die Unterzeichnung (-sky).

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

Importieren des CA-Zertifikat

Weil es keinen Sinn, ein CA-Zertifikat in mit, wenn Sie es nicht vertrauen, müssen Sie es in die Windows-Zertifikatspeicher importieren. Sie kann , um die MMC-Snap-In verwenden, aber von der Befehlszeile:

certutil -user -addstore Root MyCA.cer

Erstellen eines Codesignaturzertifikat (SPC)

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 die gleiche wie oben, aber wir bieten einen Emittenten Schlüssel und das Zertifikat (der -ic und -IV-Schalter).

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

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

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

Mit dem Zertifikat zum Signieren Code

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

( Sehen Sie, warum Zeitstempel Rolle können)

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

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

Voll Microsoft Dokumentation

Downloads

Für diejenigen, die nicht .NET-Entwickler sind, werden Sie eine Kopie der Windows SDK und .NET Framework benötigen. Ein aktueller Link verfügbar ist hier: SDK & .NET (die installiert makecert in C:\Program Files\Microsoft SDKs\Windows\v7.1). Ihre Ergebnisse können variieren.

MakeCert ist aus der Visual Studio-Eingabeaufforderung zur Verfügung. Visual Studio 2015 tut es, und es kann aus dem Startmenü in Windows 7 unter „Entwickler-Eingabeaufforderung für VS 2015“ oder „VS2015 x64 india Tools-Eingabeaufforderung“ (wahrscheinlich alle von ihnen im selben Ordner) gestartet werden.

Andere Tipps

Roger Antwort war sehr hilfreich.

Ich hatte ein wenig Mühe, es mit, aber, und hielt das immer rot Fehlerdialog „Windows kann den Herausgeber dieser Treibersoftware nicht verifizieren“. Der Schlüssel war das Teststammzertifikat mit

installieren
certutil -addstore Root Demo_CA.cer

, welche Roger Antwort nicht ganz decken.

Hier ist eine Batch-Datei, die für mich gearbeitet (mit meiner INF-Datei, nicht inbegriffen). Es zeigt, wie alles von Anfang bis Ende zu tun, ohne GUI-Tools überhaupt (Mit Ausnahme von ein paar Eingabe des Kennworts auffordert).

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

Wie in der Antwort angegeben, um einen nicht veraltet zu nutzen Ihr eigenes Skript zu unterzeichnen, sollte man verwenden? New-SelfSignedCertificate .

  1. Generieren Sie den Schlüssel:
    New-SelfSignedCertificate -DnsName email@yourdomain.com -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 Die [0] machen diese Arbeit für die Fälle, wenn Sie mehr als ein Zertifikat haben ... Offensichtlich ist der Index des Zertifikats Sie verwenden möchten, machen passen ... oder eine Art und Weise verwenden zu filtrieren (von thumprint oder Emittenten).

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

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

  5. Melden Sie das Skript.
    Set-AuthenticodeSignature .\script.ps1 -Certificate (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)

Natürlich, wenn Sie Setup den Schlüssel haben, können Sie einfach alle anderen Skripte mit unterzeichnen.
Sie können detaillierte Informationen und eine Hilfe zur Fehlerbehebung in dieser Artikel .

Wie die Powershell 4.0 (Windows 8.1 / Server 2012 R2) ist es möglich, eine machen Zertifikat in Windows ohne makecert.exe .

Die Befehle, die Sie brauchen, sind New-SelfSignedCertificate und Export-PfxCertificate .

Anweisungen sind in Selbst Erstellen signierten Zertifikaten mit Powershell .

Es ist ziemlich einfach mit dem New-SelfSignedCertificate Befehl in Powershell. Öffnen Sie Powershell, und führen Sie diese drei Befehle.

  

1) Zertifikat erstellen :
     $ Cert = New-SelfSignedCertificate -DnsName www.yourwebsite.com   -Typs Codesigning -CertStoreLocation Cert: \ Current \ My

     

2) Legen Sie das Kennwort für das :
  $ CertPassword = ConvertTo-Secure   -String "my_passowrd" -Force -AsPlainText

     

3) Export it :
    Export-PfxCertificate -cert "cert: \ Current \ My \ $ ($ cert.Thumbprint)"   -FilePath "d: \ selfsigncert.pfx" -Password $ CertPassword

Ihr Zertifikat selfsigncert.pfx @ D:/ befinden


Optionaler Schritt: Sie würde auch Zertifikat Passwort Systemumgebungsvariablen hinzuzufügen. dies zu tun, indem unten in cmd eingeben: setx CSC_KEY_PASSWORD "my_password"

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top