So erstellen Sie ein Windows-Localhost-Zertifikat basierend auf einer lokalen Zertifizierungsstelle

2779
David Spector

Bei meinen Versuchen, die Funktionsweise von TLS-Zertifikaten unter Windows zu verstehen, habe ich keine einfache und umfassende Anleitung gefunden, aber ich habe einige notwendige Schritte unternommen.

Zunächst gelang es mir, den Befehl OpenSSL als OpenSSL Light Stable von slproweb.com/products/Win32OpenSSL.html herunterzuladen. Kurze Beschreibungen der Unterbefehle finden Sie unter https://www.openssl.org/docs/man1.1.0/apps/ . Ich habe den Ordner " OpenSSL bin " unter System> Eigenschaften> Erweitert> Umgebungsvariablen> Systemvariablen> Pfad hinzugefügt, sodass der Befehl "OpenSSL" in einem Admin-Eingabeaufforderungsfenster funktioniert.

Als Nächstes lernte ich unter deliciousbrains.com/ssl-certificate-authority-for-local-https-development/ die Erstellung einer Zertifizierungsstelle (Certificate Authority, CA) für die lokale Verwendung. Dies führte dazu, dass eine erstellte .CRT-Datei am Speicherort des Computers "Vertrauenswürdige Stammzertifizierungsstellen" gespeichert wurde, die von lokalen Browsern beim Zugriff auf HTTPS-Webseiten verwendet wird. Dieses neue CA-Zertifikat finden Sie unter Computerverwaltungskonsole> Zertifikate (die möglicherweise als neues MMC-Snap-In hinzugefügt werden müssen) oder unter "Zertifikate anzeigen" irgendwo in den Optionen eines Browsers oder mithilfe des sehr nützlichen certutil- Windows-Befehls.

Die spezifischen Befehle, die in einer Admin-Eingabeaufforderung (% windir% \ system32 \ cmd.exe) zum Erstellen einer lokalen Zertifizierungsstelle verwendet wurden, waren:

  1. Wählen Sie eine geheime Passphrase und geben Sie diese bei Bedarf ein.
  2. Generieren Sie den privaten Schlüssel: openssl genrsa -des3 -out CA_NAME.key 2048
  3. Generieren Sie ein PEM-Zertifikat aus dem privaten Schlüssel: openssl req -x509 -new -nodes -key CA_NAME.key -sha256 -days 1825 -out CA_NAME.pem
  4. Erstellen Sie ein Root-CA-Zertifikat: openssl x509 -outform der -in CA_NAME.pem -out CA_NAME.crt
  5. Installieren Sie das CA-Stammzertifikat auf dem lokalen Computer: Klicken Sie mit der rechten Maustaste auf CA_NAME.crt, und wählen Sie Assistenten zum Installieren von Zertifikatszertifikaten> Lokaler Computer> Durchsuchen ...> Vertrauenswürdige Stammzertifizierungsstellen

Hinweis: Es ist mir nicht klar, welche dieser Passphrasen und generierten Dateien jemals wieder benötigt werden und zu welchem ​​Zweck. Natürlich wird das gespeicherte CA-Zertifikat als Stamm für weitere spezifischere Zertifikate auf dem aktuellen Computer verwendet.

Als nächstes frage ich mich, wie Sie ein Serverautorisierungszertifikat für eine oder mehrere Websites in der localhost-Domäne erstellen (Beispiele: localhost / MY_WEBSITE, localhost / FOLDER / FILE.html), basierend auf dem neu installierten vertrauenswürdigen CA-Zertifikat. Dies würde die Verwendung von Browser-URLs wie https: // localhost / MY_WEBSITE ohne Fehler zulassen, sofern der lokale Server auf solche sicheren Webanforderungen wartet .

Ich habe mehrere Algorithmen gefunden, aber alle scheinen entweder veraltet oder unvollständig zu sein. Es ist klar, dass ein Teil dieses Algorithmus die Erstellung einer "SAN" -Datei sein muss, die die Liste der Websites enthält, die autorisiert werden sollen, und dass ein anderer Teil eine Certificate Signing Request (CSR) sein muss.

Kann jemand bitte einen solchen Algorithmus bereitstellen, eine Liste mit Schritten wie in der obigen Liste zum Erstellen und Installieren eines localhost-Websitezertifikats basierend auf einem vorhandenen lokalen Zertifizierungsstellenzertifikat, das wie oben erstellt wurde? Bitte testen Sie unbedingt Ihre Vorschläge, bevor Sie antworten.

0
Siehe [SSL-Zertifikat mit SAN-Erweiterung ausstellen] (https://serverfault.com/questions/845806/how-to-issue-ssl-certificate-with-san-extension). Steffen Ullrich vor 6 Jahren 1
Steffen, danke. Welche dieser drei niedrig bewerteten Teilantworten empfehlen Sie? Keiner scheint richtig oder vollständig zu sein. Ich suche nach einer Antwort, die funktioniert, getestet ist und so viele Details enthält, wie sie in meiner Frage enthalten ist. Nichts davon scheint zuverlässig zu sein. David Spector vor 6 Jahren 0
* "Welche dieser drei niedrig bewerteten Teilantworten empfehlen Sie?" * - Ich habe keine Ahnung, wovon Sie sprechen. Die Frage, mit der ich verlinkt habe, enthält nur eine einzige Antwort, die erläutert, wie ein SAN-Zertifikat erstellt wird, wenn Sie bereits über das CA-Zertifikat verfügen (das Sie bereits erstellt haben). Steffen Ullrich vor 6 Jahren 0

1 Antwort auf die Frage

0
JW0914

OpenSSL erfordert kein Admin-Terminal.

... Es ist mir nicht klar, welche dieser Passphrasen und generierten Dateien jemals wieder benötigt werden und zu welchem ​​Zweck.

  • Die CA / ICA-Passphrase wird bei der Signatur neuer Zertifikate verwendet, da die CA / ICA immer über einen verschlüsselten Schlüssel verfügen sollte
  • Serverzertifikate sollten niemals einen verschlüsselten Schlüssel enthalten, da zum Starten ein manueller Eingriff erforderlich ist
  • Client-Zertifikate mit einem verschlüsselten Schlüssel fordern die Passphrase bei jeder Verwendung des Zertifikats an.


Die nächste Frage, die ich hier frage, ist, wie Sie ein Serverautorisierungszertifikat für eine oder mehrere Websites in der localhost-Domäne erstellen

Dies wird durch SAN-Profile erreicht.

  • Die Standardeinstellung openssl.cnf von OpenSSL ist ziemlich schwierig für jeden, der nicht vertraut ist, zu analysieren. Daher habe ich vor einigen Jahren eine benutzerdefinierte, leicht verständliche openssl.cnf auf meinem GitHub erstellt
    • Zeile 164: SAN-Profile beginnen
    • Zeile 260: V3-Profile beginnen
    • Zeile 430: Alle erforderlichen Befehle und Informationen beginnen


... Kann jemand bitte einen solchen Algorithmus bereitstellen, eine Liste mit Schritten wie in der obigen Liste zum Erstellen und Installieren eines localhost-Websitezertifikats basierend auf einem vorhandenen lokalen CA-Zertifikat, das wie oben erstellt wurde?

Um die Dinge in Ordnung zu halten, verwende ich V3-Profile, die in meiner oben verlinkten openssl.cnf enthalten sind

  1. Erforderliche Verzeichnisse erstellen:

    mkdir ca\csr certs crl keys 
  2. Erforderliche Dateien erstellen:

    echo 00 > crl\crlnumber && type NUL > index && type NUL > rand && echo 00 > serial 
  3. Zertifizierungsstelle erstellen

    openssl req -x509 -new -sha512 -days 3650 -newkey rsa:4096 -keyout ca\ca.key.pem -out ca\ca.crt.pem -config .\openssl.cnf -extensions v3_ca 
    • CA Key Passphrases: Mindestens 20 Zeichen, bestehend aus 2: Großbuchstaben, Kleinbuchstaben, Zahlen und Symbolen

      1. Server Cert CSR generieren:

        openssl req -out ca\csr\server.csr -new -days 3650 -sha512 -newkey rsa:2048 -keyout keys\server.key.pem -config .\openssl.cnf -extensions v3_sophos -nodes 
      2. Erstellen und Signieren eines Zertifikats mit CA:

        openssl x509 -req -sha512 -days 3650 -in ca\csr\server.csr -CA ca\ca.crt.pem -CAkey ca\ca.key.pem -CAserial .\serial -out certs\server.crt.pem -extfile .\openssl.cnf -extensions v3_sophos 
      3. Zertifizierungsstelle mit Zertifizierungsstelle verknüpfen:

        type ca/ca.crt.pem >> certs/server.crt.pem 
      4. Export nach PKCS12:

        openssl pkcs12 -export -out certs\server.p12 -inkey certs\server.key.pem -in certs\server.crt.pem -certfile ca\ca.crt.pem 


zusätzliche Information