OpenSSL unter Windows 10: Eine umfassende PowerShell-Anleitung

Das Generieren von SSL-Zertifikaten kann eine einschüchternde Aufgabe sein, die mit Frustration und Kummer gefüllt ist. Aber es muss nicht so sein! Wenn Sie Windows 10 und OpenSSL haben und ein wenig Hilfe von diesem Tutorial, sind Sie auf dem richtigen Weg.

In diesem Artikel lernen Sie, wie Sie OpenSSL unter Windows 10 installieren. Sobald es installiert ist, werden Sie SSL-Zertifikate generieren, Zertifikate überprüfen und Fehler beheben und zwischen Formaten konvertieren können.

Beginnen wir mit dem Meistern von OpenSSL unter Windows 10 mit PowerShell!

Verwandt: Zertifikate verwalten mit Windows Certificate Manager und PowerShell

Voraussetzungen

In diesem Artikel lernen Sie anhand einer praktischen Herangehensweise. Obwohl OpenSSL historisch gesehen ein Dienstprogramm für Linux-Betriebssysteme ist, können Sie es auch mit Windows verwenden.

Alle Screenshots in diesem Leitfaden wurden mit Windows 10 Build 1909 und PowerShell 7 aufgenommen.

OpenSSL unter Windows 10 mit PowerShell und Chocolatey installieren

Angenommen, Sie haben Chocolatey mithilfe der Installationsanweisungen installiert. Ihre erste Aufgabe besteht darin, OpenSSL unter Windows 10 zu installieren. Öffnen Sie dazu Ihre PowerShell-Konsole und führen Sie den Befehl choco install OpenSSL.Light wie unten gezeigt aus.

Installing OpenSSL.Light using Chocolatey package manager in PowerShell

Das war’s! Sie haben OpenSSL nun mit PowerShell installiert.

Ein Arbeitsverzeichnis einrichten

In diesem Tutorial werden einige Zertifikate erstellt, um daraus zu lernen. Um sicherzustellen, dass alle Arbeiten, die Sie hier durchführen, in einem einzigen Ordner durchgeführt werden und später aufgeräumt werden können, erstellen Sie einen solchen Ordner.

In diesem Tutorial werden alle Zertifikate und zugehörigen Dateien im Ordner C:\certs gespeichert. Sie können einen Ordner mit PowerShell erstellen, indem Sie den folgenden Befehl ausführen.

New-Item -ItemType Directory -Path C:\certs

Jetzt ist es an der Zeit, OpenSSL zu konfigurieren.

OpenSSL konfigurieren

Standardmäßig enthält OpenSSL unter Windows 10 keine Konfigurationsdatei. Dies ist beabsichtigt, da es viele Konfigurationsoptionen gibt, die Sie anpassen können. Für dieses Handbuch verwenden Sie eine Beispielkonfiguration, die Sie später an Ihre Sicherheitsanforderungen anpassen können.

Öffnen Sie PowerShell und führen Sie den folgenden Befehl aus. Dieser Befehl lädt eine Beispielkonfigurationsdatei von MIT herunter und speichert sie als openssl.cnf im aktuellen Arbeitsverzeichnis.

Invoke-WebRequest 'http://web.mit.edu/crypto/openssl.cnf' -OutFile .\openssl.cnf

Jetzt können Sie die Datei openssl.cnf öffnen und sollten etwas sehen, das wie unten dargestellt aussieht.

Sample OpenSSL configuration file

Die heruntergeladene Konfiguration funktioniert vorerst wie sie ist. Verwenden Sie die Standardwerte nicht in einer Produktionsumgebung!

Aktualisieren Sie die Umgebungsvariablen des PowerShell-Profils

Um einen reibungslosen Ablauf zu gewährleisten, sollten Sie Ihr PowerShell-Profil unter Windows 10 ändern. Durch das Einrichten einiger Umgebungsvariablen können Sie problemlos zwischen verschiedenen Versionen von OpenSSL wechseln, die Sie möglicherweise installiert haben.

I suggest adding two environment variables to your PowerShell profile called path and OPENSSL_CONF. You will update the PATH environment variable to ensure you can run the openssl binary in any location while on the command line.

Im Folgenden sehen Sie eine Möglichkeit, ein PowerShell-Profil zu erstellen, falls Sie noch keines haben. Dieser Befehl fügt den Pfad zur OpenSSL-Binärdatei zu Ihrem PATH hinzu und weist den Konfigurationsdateipfad der Variablen OPENSSL_CONF zu.

# Fügen Sie Umgebungsvariablen zum PowerShell-Profil hinzu
# Überprüfen Sie, ob ein Profil vorhanden ist. Wenn nicht, erstellen Sie eins!
if (-not (Test-Path $profile) ) {
    New-Item -Path $profile -ItemType File -Force
}

# Bearbeiten Sie das Profil, um diese Zeilen hinzuzufügen
'$env:path = "$env:path;C:\Program Files\OpenSSL\bin"' | Out-File $profile -Append
'$env:OPENSSL_CONF = "C:\certs\openssl.cnf"' | Out-File $profile -Append

Um die Umgebungsvariablen zu verwenden, laden Sie Ihr Profil neu, indem Sie . $profile eingeben oder PowerShell einfach schließen und erneut öffnen.

Jetzt können Sie das openssl-Binärprogramm problemlos überall in PowerShell aufrufen, wie unten gezeigt.

Verifying OpenSSL version in PowerShell

Verwenden von OpenSSL unter Windows 10 zum Generieren eines CSR und eines privaten Schlüssels

Bevor Sie ein SSL-Zertifikat erstellen können, müssen Sie eine Zertifikatsanforderung (CSR) generieren. Ein CSR ist eine codierte Datei, die Ihnen eine Möglichkeit bietet, Ihren öffentlichen Schlüssel mit einer Zertifizierungsstelle (CA) zu teilen. Diese Datei enthält Identifizierungsinformationen, einen Signaturalgorithmus und eine digitale Signatur. Erstellen wir Ihre erste CSR und Ihren privaten Schlüssel.

Verwandt: Ihr Leitfaden zu X509-Zertifikaten für Sterbliche

Führen Sie den folgenden Befehl aus, um eine CSR zu erstellen. OpenSSL wird Sie dann auffordern, einige Identifizierungsinformationen einzugeben, wie Sie in der folgenden Demonstration sehen können.

openssl req -new -out MyFirst.csr
Generating a CSR and Private Key using OpenSSL in PowerShell

Wenn Sie fertig sind, haben Sie eine gültige CSR und einen privaten Schlüssel, die verwendet werden können, um ein SSL-Zertifikat für Sie auszustellen.

Die Standardeinstellungen der Konfigurationsdatei können weiter bearbeitet werden, um diesen Prozess zu vereinfachen, falls Sie nicht jedes Mal Daten eingeben möchten, wenn Sie eine CSR generieren.

Sie können mehr über die verfügbaren CSR-Optionen lesen und Beispielkonfigurationen in den Handbuchseiten anzeigen. OpenSSL hat auch ein aktives GitHub-Repository mit Beispielen.

Generierung von RSA-Schlüsselpaaren

Sie können auch RSA-Schlüsselpaare (öffentlich/privat) mit OpenSSL erstellen. Dazu erstellen Sie zunächst einen privaten Schlüssel mit dem Unterbefehl genrsa wie unten gezeigt.

Wenn Sie den folgenden Befehl ausführen, generiert OpenSSL unter Windows 10 einen RSA-Privatschlüssel mit einer Schlüssellänge von 2048 Bits. Dieser Schlüssel wird auf moderner Hardware fast sofort generiert. Der resultierende Schlüssel wird im Arbeitsverzeichnis ausgegeben.

# Generieren eines privaten Schlüssels mit maximaler Schlüsselgröße von 2048
# Die Schlüsselgrößen können 512, 758, 1024, 1536 oder 2048 sein.
openssl genrsa -out rsa.private 2048

Als nächstes generieren Sie einen öffentlichen Schlüssel mit dem zuvor erstellten privaten Schlüssel unter Verwendung des Unterbefehls rsa. Die folgende Syntax erstellt einen öffentlichen Schlüssel namens rsa.public im Arbeitsverzeichnis aus dem privaten Schlüssel rsa.private.

# Generieren eines öffentlichen Schlüssels mit dem privaten Schlüssel
openssl rsa -in rsa.private -out rsa.public -pubout -outform PEM

Generieren eines selbstsignierten Zertifikats

Gelegentlich müssen Sie möglicherweise ein selbstsigniertes Zertifikat generieren. Selbstsignierte Zertifikate sind für den Laborgebrauch in Ordnung, aber nicht sicher für den Einsatz in einer Produktionsumgebung.

Erstellen Sie nun ein selbstsigniertes Zertifikat, bevor Sie zur nächsten Aufgabe übergehen. Geben Sie dazu den folgenden Befehl ein, um ein X509-SSL-Zertifikat zu erstellen. Dieses Zertifikat verwendet SHA256-Kryptographie, ist 365 Tage lang gültig und hat eine RSA-Schlüssellänge von 2048 Bits. Das Zertifikat wird im Arbeitsverzeichnis gespeichert.

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt

Sie sind jetzt bereit, das Zertifikat in einem Browser oder Server zu importieren.

Validierung von CSRs, Zertifikaten und Schlüsseln mit OpenSSL

Das Überprüfen der Informationen in einem CSR, einem privaten Schlüssel, einem Zertifikat oder PKCS#12 kann Ihnen Zeit sparen, wenn Sie SSL-Fehler beheben möchten. Manchmal wurde möglicherweise ein falscher Schlüssel zur Erstellung eines Zertifikats verwendet. Möglicherweise haben Sie auch falsche Identifikationsinformationen im Zertifikat.

Beginnen wir mit der Überprüfung eines CSR unter Verwendung des Befehls req und einiger Parameter:

openssl req -text -noout -verify -in .\MyFirst.csr
Checking a CSR with OpenSSL in PowerShell

Details wie Ländername, Organisationsname und die E-Mail-Adresse, die Sie bei der Erstellung des CSR am Anfang dieser Anleitung angegeben haben, sollten genau übereinstimmen.

Sie können auch ein Zertifikat mithilfe des Unterbefehls x509 und einiger Parameter überprüfen:

openssl x509 -in .\certificate.crt -text -noout | more
Checking a certificate with OpenSSL with the x509 command in PowerShell

Konvertieren von Zertifikaten mit OpenSSL

Es gibt Situationen, in denen eine Anwendung ein bestimmtes Zertifikatsformat nicht verwendet. Dieses Problem kann beispielsweise bei einer Anwendung namens HAproxy auftreten, die ein PEM-Zertifikat erfordert, während Sie möglicherweise ein im DER-Format vorliegendes Zertifikat (.crt .cer .der) haben.

Um die Konvertierung eines Zertifikats zu demonstrieren, konvertieren wir das zuvor erstellte selbstsignierte Zertifikat in das DER-Format (certificate.crt) in das PEM-Format. Verwenden Sie dazu den folgenden Code-Ausschnitt.

Der folgende Befehl verwendet den Unterbefehl x509 mit dem Parameter -inform, der dem Format der Eingabedatei (-in) entsprechen sollte, gefolgt vom Ausgabeformat (-out).

openssl x509 -inform der -in .\certificate.crt -out .\certificate.pem

Sie können auch die Reihenfolge umkehren, um das DER-Format aus PEM zu erstellen, wie unten gezeigt.

openssl x509 -outform der -in .\certificate.pem -out .\certificate.der

Und zu guter Letzt können Sie PKCS#12 in PEM und PEM in PKCS#12 konvertieren. Dies ist ein Dateityp, der private Schlüssel und Zertifikate enthält. Verwenden Sie das Unterkommando „pkcs12“, um in das PEM-Format zu konvertieren.

openssl pkcs12 -in .\SomeKeyStore.pfx -out .\SomeKeyStore.pem -nodes

Sie können auch ein PEM-Zertifikat und einen privaten Schlüssel in das PKCS#12-Format konvertieren, indem Sie „-export“ mit einigen zusätzlichen Optionen verwenden. Im folgenden Beispiel exportieren Sie ein PKCS#12-formatiertes Zertifikat mit Ihrem privaten Schlüssel, wobei „SomeCertificate.crt“ als Eingabequelle verwendet wird. Mit dem Optionswert „-certfile“ „MyCACert.crt“ können Sie „SomeCertificate.crt“ überprüfen.

openssl pkcs12 -export -out SomeCertificate.pfx -inkey SomePrivateKey.key -in SomeCertificate.crt -certfile MyCACert.crt

Fehlersuche und Debugging

Jetzt, da Sie CSR’s, Zertifikate und Schlüsselpaare erstellen und konvertieren können, ist es an der Zeit zu lernen, wie man Probleme behebt und debuggt. OpenSSL enthält Befehle, mit denen es ein Kinderspiel ist, Probleme zu beheben.

OpenSSL ermöglicht es Ihnen auch, Zertifikate auf Dateiintegrität zu überprüfen und nach möglicher Datenkorruption zu testen. Mit einem MD5-Prüfsumme können Sie die folgenden Codebeispiele verwenden, um Zertifikate, Schlüssel und CSR’s zu testen:

# Zertifikate
openssl x509 -noout -modulus -in .\certificate.crt | openssl md5

# Öffentliche / Private Schlüssel
openssl rsa -noout -modulus -in .\privateKey.key | openssl md5

# Zertifikatsanforderung
openssl req -noout -modulus -in .\MyFirst.csr | openssl md5

# Überprüfen einer externen SSL-Verbindung
openssl s_client -connect www.google.com:443

Sobald Sie den ursprünglichen Hash haben, können Sie diesen mit einem aktuellen Hash vergleichen, um zu überprüfen, ob das Zertifikat nicht verändert oder beschädigt wurde.

Hier ist ein Beispiel dafür, wie dieser Code in PowerShell ausgeführt wird:

Sample troubleshooting command output with OpenSSL in PowerShell

Zusammenfassung

In diesem Artikel haben Sie gelernt, wie Sie OpenSSL unter Windows 10 installieren und konfigurieren, CSR, Schlüsselpaar und SSL-Zertifikat erstellen. Sie haben auch gelernt, wie Sie zwischen verschiedenen Zertifikatsformaten konvertieren und grundlegende Fehlerbehebung mit den integrierten Unterbefehlen durchführen können.

Zusätzliche Ressourcen

Source:
https://adamtheautomator.com/openssl-windows-10/