Zurück zum Blog

OpenSSL-Grundlagen: Arbeiten mit privaten Schlüsseln, Certificate Signing Requests und SSL-Zertifikaten

OpenSSL-Grundlagen: Arbeiten mit privaten Schlüsseln, Certificate Signing Requests und SSL-Zertifikaten

OpenSSL ist eine Open-Source-Kryptographie-Bibliothek, die eine Vielzahl von Befehlen enthält, die im TLS Protocol und der Public Key Infrastructure verwendet werden. OpenSSL wurde 1998 veröffentlicht und ist für Windows-, Linux-, macOS- und BSD-Systeme verfügbar. Der OpenSSL-Befehl hilft Ihnen bei der Durchführung verschiedener Aufgaben, einschließlich Certificate Signing Request (CSR), der Generierung privater Schlüssel und der SSL-Zertifizierung.

OpenSSL ist wichtig, da es eine ordnungsgemäße SSL-Implementierung gewährleistet. Der richtige Erhalt von SSL ist entscheidend für die Sicherheit Ihrer Website. Darüber hinaus bevorzugt Google, eine der führenden Suchmaschinen, Websites mit implementierten SSL-Zertifikaten. Einige Browser wie Chrome und Firefox markieren Ihre Website möglicherweise als „Nicht sicher“, wenn Sie kein ordnungsgemäßes SSL-Zertifikat haben. Daher ist es von größter Bedeutung, den Datenverkehr Ihrer Website über das verschlüsselte HTTPS-Protokoll abzuwickeln.

Das Wichtigste zuerst

Dieses Tutorial ist eine Art Spickzettel (Cheat Sheet) und enthält einige, aber wahrscheinlich nicht alle OpenSSL-Befehle, die Sie im Alltag verwenden können.

Der erste Teil erklärt alles, was Sie über Certificate Signing Requests (CSR) wissen müssen. Wenn Sie jedoch bereits damit vertraut sind, können Sie zu jedem anderen Abschnitt springen, der für Ihr Vorhaben relevant ist. Jeder Abschnitt enthält ein Befehlszeilen-Snippet, um das im Untertitel genannte Ziel zu erreichen.

Fangen wir an!

Abschnitt 1: Certificate Signing Requests (CSRs) verstehen

Ein Certificate Signing Request (Zertifikatssignierungsanforderung) ist eine Voraussetzung für den Erhalt eines SSL-Zertifikats von einer Zertifizierungsstelle (CA). Der CSR enthält den öffentlichen Schlüssel eines Schlüsselpaars und einige zusätzliche Informationen. Diese müssen während des Signierungsprozesses in das Zertifikat eingefügt werden.

Während der CSR-Generierung werden Sie aufgefordert, identifizierende Informationen anzugeben, die als Distinguished Name (DN) bezeichnet werden. Der DN enthält für das Zertifikat erforderliche Felder wie den Common Name (CN), bei dem es sich um den genauen Fully Qualified Domain Name (FQDN) des Hosts handelt, der das Zertifikat verwenden wird. Die anderen Felder des DN dienen der Angabe zusätzlicher Informationen wie Land, Bundesland, Ort und Name der Organisation oder des Unternehmens, wenn Sie geschäftsspezifische Zertifikate generieren. Sie können die Eingabeaufforderungen überspringen, indem Sie die Informationen aus einer Datei oder über die Befehlszeile bereitstellen.

Sehen Sie sich ein Beispiel für die CSR-Informationsabfrage im folgenden Screenshot an:

Sie können die Informationen in einem einzeiligen Befehl angeben, um die Eingabeaufforderungen zu vermeiden, indem Sie das Flag -subj wie unten gezeigt hinzufügen und die Informationen für die Felder angeben:

Der obige Befehl übernimmt dieselben Informationen, die im Codeblock-Beispiel der CSR-Informationsabfragen angezeigt werden.

Abschnitt 2: Generieren von Certificate Signing Requests

In diesem Abschnitt behandeln wir die OpenSSL-Befehle, mit denen Sie CSRs und private Schlüssel generieren können. CSRs sind erforderlich, um SSL-Zertifikate bei einer Zertifizierungsstelle (CA) anzufordern.

Generieren eines privaten Schlüssels und eines Certificate Signing Request

Sie können diese Methode verwenden, wenn Sie möchten, dass eine Zertifizierungsstelle ein SSL-Zertifikat ausstellt, um Ihr Apache oder Nginx Server, um Datenverkehr über HTTPS, d. h. HTTP mit TLS, bereitzustellen. Der mit dem Befehl generierte CSR kann an eine CA gesendet werden, um ein von einer CA signiertes SSL-Zertifikat anzufordern. Sie können unseren detaillierten Anleitungen folgen, wie Sie Ihre Apache oder Nginx-Server auf Ubuntu einrichten.

Geben Sie den folgenden Befehl in Ihrem Terminal ein, um einen privaten 2048-Bit-Schlüssel (domain.key) und einen CSR (domain.csr) von Grund auf neu zu generieren:

Beantworten Sie die Eingabeaufforderungen mit Ihren spezifischen CSR-Informationen. Optional können Sie dem Befehl das Flag -subj hinzufügen, um die Eingabeaufforderungen zu vermeiden:

Das -newkey rsa:2048-Flag gibt an, dass der Schlüssel mit dem 2048-Bit-RSA-Algorithmus generiert werden soll. Das -nodes-Flag gibt an, dass keine Passphrasen-Verschlüsselung für den privaten Schlüssel verwendet wird. Es gibt eine -new-Option, die nicht enthalten ist, aber impliziert wird, um anzuzeigen, dass ein neuer CSR generiert wird.

Generieren einer Zertifikatsignierungsanforderung (CSR) aus einem vorhandenen privaten Schlüssel

Wenn Sie bereits einen privaten Schlüssel haben, können Sie diese Methode verwenden, um einen CSR zu generieren. Sie verwenden diesen dann, um ein SSL-Zertifikat von einer CA anzufordern. Geben Sie den folgenden Befehl ein, um einen neuen CSR (domain.csr) unter Verwendung eines vorhandenen privaten Schlüssels (domain.key):

Beantworten Sie die Eingabeaufforderungen mit Ihren spezifischen CSR-Informationen. Optional können Sie das -subj-Flag zum Befehl hinzufügen, um die Eingabeaufforderungen zu vermeiden:

Das Flag -key gibt den vorhandenen privaten Schlüssel (domain.key) an, der zur Generierung eines neuen CSR verwendet werden soll. Das -new-Flag gibt an, dass ein neuer CSR generiert wird.

Generieren einer Zertifikatsignierungsanforderung (CSR) aus einem vorhandenen Zertifikat und privaten Schlüssel

Wenn Sie bereits ein Zertifikat haben, das Sie zur Generierung eines CSR verwenden möchten, können Sie diese Methode nutzen. Diese Methode kann nützlich sein, wenn Sie oder Ihre CA den ursprünglichen CSR verlieren und Sie ihn mit den zuvor eingegebenen CSR-Informationen generieren müssen, ohne diese erneut eingeben zu müssen. Der Befehl extrahiert die Informationen aus dem vorhandenen Zertifikat. Geben Sie den folgenden Befehl in Ihrem Terminal ein, um einen neuen CSR (domain.csr) unter Verwendung eines vorhandenen Zertifikats (domain.crt) und eines vorhandenen privaten Schlüssels (domain.key):

Die Option -x509toreq gibt an, dass Sie das X509-Zertifikat verwenden, um den CSR zu generieren.

Abschnitt 3: Generieren von SSL-Zertifikaten

In manchen Situationen möchten Sie vielleicht ein SSL-Zertifikat verwenden, ohne sich um ein von einer CA signiertes Zertifikat bemühen zu müssen. In diesem Abschnitt wird erklärt, wie Sie Ihre eigenen Zertifikate signieren können. Es ist gültig und kostenlos. Diese Zertifikate werden als selbstsignierte Zertifikate, und sie sind ziemlich verbreitet.

Ein selbstsigniertes Zertifikat ist mit seinem eigenen privaten Schlüssel signiert. Sowohl selbstsignierte als auch von einer CA signierte Zertifikate funktionieren gleichermaßen gut, um Daten und Website-Verkehr zu verschlüsseln. Bei selbstsignierten Zertifikaten erhalten Benutzer jedoch in der Regel eine Warnung in ihren Browsern, dass dem Zertifikat nicht vertraut wird. Daher können Sie selbstsignierte Zertifikate für Websites verwenden, die keine sensiblen Informationen mit Benutzern austauschen, oder auf Nicht-Produktionsservern. Unten finden Sie die OpenSSL-Befehle, mit denen Sie selbstsignierte Zertifikate generieren können.

  • Generieren eines selbstsignierten Zertifikats

Sie können diese Methode verwenden, um ein SSL-Zertifikat zu erstellen, um Ihren Apache- oder Nginx-Server zu sichern. Dies stellt sicher, dass der Datenverkehr über HTTPS oder HTTP über TLS läuft, ohne dass eine Zertifizierungsstelle (CA) das Zertifikat signieren muss:

Beantworten Sie die Eingabeaufforderungen mit Ihren spezifischen CSR-Informationen. Optional können Sie das -subj-Flag zum Befehl hinzufügen, um die Eingabeaufforderungen zu vermeiden:

Das -x509-Flag zeigt die Erstellung eines selbstsignierten Zertifikats an. Die Option -days 365 gibt die Anzahl der Tage an, für die das Zertifikat gültig ist. In diesem Fall sind es 365 Tage. Sie können auch eine andere Anzahl von Tagen wählen. Der Befehl erzeugt eine temporäre CSR, um die Informationen zu speichern, die Sie mit dem Zertifikat verknüpfen sollten.

  • Erstellen eines selbstsignierten Zertifikats aus einem vorhandenen privaten Schlüssel

Diese Methode hilft Ihnen, ein selbstsigniertes Zertifikat aus Ihrem bereits vorhandenen privaten Schlüssel zu erstellen. Geben Sie den folgenden Befehl ein, um ein selbstsigniertes Zertifikat (domain.crt) unter Verwendung eines vorhandenen privaten Schlüssels (domain.key):

Beantworten Sie die Eingabeaufforderungen mit Ihren spezifischen CSR-Informationen. Optional können Sie das -subj-Flag zum Befehl hinzufügen, um die Eingabeaufforderungen zu vermeiden:

Das -x509-Flag zeigt die Erstellung eines selbstsignierten Zertifikats an. Die Option -days 365 gibt die Anzahl der Tage an, für die das Zertifikat gültig ist. In diesem Fall sind es 365 Tage. Sie können auch eine andere Anzahl von Tagen wählen. Die Option -new startet die Abfrage der CSR-Informationen.

Abschnitt 4: Anzeigen von Zertifikaten

Zertifikate und CSR-Dateien werden codiert und mit der .pem-Erweiterung gespeichert. Sie steht für Privacy-Enhanced Mail. Es ist ein Dateiformat zum Speichern und Senden von kryptografischen Schlüsseln, Zertifikaten und anderen wichtigen Daten. PEM-Dateien sind für Menschen nicht ohne Weiteres lesbar. In diesem Abschnitt finden Sie Befehle, mit denen Sie die Einträge aus den codierten PEM-Dateien anzeigen können.

  • Anzeigen von CSR-Dateien

Geben Sie den folgenden Befehl ein, um den Inhalt einer CSR (domain.csr) in Ihrem Terminal anzuzeigen und zu überprüfen:

Der obige Befehl kann beispielsweise eine Ausgabe wie diese erzeugen:

Viewing CSR files

  • Anzeigen von Zertifikatseinträgen

Geben Sie den folgenden Befehl ein, um den Inhalt eines Zertifikats (domain.crt):

Der obige Befehl kann eine Ausgabe wie diese erzeugen:

OpenSSL

  • Überprüfen, ob ein Zertifikat von einer Zertifizierungsstelle signiert wurde

Um zu überprüfen, ob ein Zertifikat (domain.crt) von einem bestimmten CA-Zertifikat (ca.crt) signiert wurde, geben Sie den folgenden Befehl ein:

 

Abschnitt 5: Private Schlüssel

Wenn Sie nach OpenSSL-Befehlen suchen, die zum Erstellen und Überprüfen von privaten Schlüsseln erforderlich sind, ist dieser Abschnitt genau richtig für Sie.

  • Erstellen eines privaten Schlüssels

Um einen passwortgeschützten privaten 2048-Bit-Schlüssel (domain.key) zu erstellen, geben Sie den folgenden Befehl in Ihrem Terminal ein:

Der Befehl fordert Sie zur Eingabe eines Passworts auf, um den Vorgang abzuschließen. Siehe den Screenshot unten:

Creating a Private Key

  • Überprüfen eines privaten Schlüssels

Um die Gültigkeit eines privaten Schlüssels (domain.key) zu überprüfen, geben Sie den folgenden Befehl in Ihrem Terminal ein:

Anschließend müssen Sie ein Passwort eingeben. Wenn der private Schlüssel verschlüsselt ist und Sie die korrekte Passphrase eingeben, wird der unverschlüsselte Schlüssel im Terminal angezeigt. Siehe Screenshot unten:

Verifying a Private Key

  • Überprüfen, ob ein privater Schlüssel mit einem Zertifikat und einem CSR übereinstimmt

Wenn Sie überprüfen möchten, ob ein privater Schlüssel (domain.key) mit einem Zertifikat (domain.crt) und einem CSR (domain.csr) übereinstimmt, geben Sie die folgenden Befehle in Ihrem Terminal ein:

Wenn Sie feststellen, dass die Ausgabe der obigen Befehle identisch ist, ist es wahrscheinlich, dass der private Schlüssel, das Zertifikat und der CSR zusammengehören.

  • Einen privaten Schlüssel verschlüsseln

Wenn Sie einen unverschlüsselten privaten Schlüssel (unencrypted.key) haben und die verschlüsselte Version des Schlüssels (encrypted.key) erhalten möchten, geben Sie den folgenden Befehl in Ihrem Terminal ein:

Der Befehl fordert Sie zur Eingabe einer Passphrase auf, um den privaten Schlüssel zu verschlüsseln.

  • Einen privaten Schlüssel entschlüsseln

Wenn Sie einen verschlüsselten privaten Schlüssel (encrypted.key) haben und die entschlüsselte Version davon (decrypted.key) erhalten möchten, geben Sie den folgenden Befehl in Ihrem Terminal ein:

Der Befehl fordert Sie zur Eingabe einer Passphrase für den verschlüsselten Schlüssel auf. Wenn Sie die korrekte Passphrase eingeben, wird er entschlüsselt. Die Ausgabe erfolgt in decrypted.key.

 

Abschnitt 6: Konvertieren von Zertifikatsformaten

Sie haben vielleicht bemerkt, dass wir bisher mit X.509-Zertifikaten gearbeitet haben, die mit ASCII PEM codiert sind. Das ist zwar in Ordnung, aber es gibt eine Vielzahl anderer Zertifikatscodierungen und Containertypen, die Sie verwenden können. In einigen Anwendungen bevorzugen Sie möglicherweise bestimmte Formate gegenüber anderen. Darüber hinaus können einige andere Formate mehrere Elemente wie einen privaten Schlüssel, einen CSR und ein von einer Zertifizierungsstelle signiertes Zertifikat in einer einzigen Datei enthalten. Sie können OpenSSL auch verwenden, um zwischen verschiedenen Zertifikatsformaten zu konvertieren. Lesen Sie weiter, um einige der OpenSSL-Befehle zur Konvertierung von Zertifikatsformaten kennenzulernen.

  • Konvertieren von PEM in DER

DER (Distinguished Encoding Rules) ist eine binäre Codierung für X.509-Zertifikate und private Schlüssel. Um ein PEM-codiertes Zertifikat (domain.crt) in ein DER-codiertes Zertifikat (domain.der) zu konvertieren, geben Sie den folgenden Befehl ein:

Die meisten Anwendungsfälle für das DER-Codierungsformat finden Sie in der Programmiersprache Java. Folgen Sie dieser Anleitung zur schnellen Einrichtung von Java auf Ihrem Ubuntu-Server.

  • Konvertieren von DER in PEM

Um ein DER-codiertes Zertifikat (domain.der) in ein PEM-Zertifikat (domain.crt) zu konvertieren, geben Sie den folgenden Befehl ein:

 

  • Konvertieren von PEM in PKCS7

Möglicherweise möchten Sie PEM-Zertifikate, wie z. B. domain.crt und ca-chain.crt zu einer PKCS7-Datei (domain.p7b) hinzufügen. Hier ist der Befehl, um dies zu erreichen:

Sie können die Option -certfile mehrmals verwenden, um die Zertifikate anzugeben, die der PKCS7-Datei hinzugefügt werden sollen. PKCS7-Dateien sind meist für Java-Keystores und Microsoft IIS relevant. Sie sind auch als P7B-Dateien bekannt und sind ASCII-Dateien, die Zertifikate und von einer Zertifizierungsstelle signierte Zertifikate enthalten können.

  • PKCS7 in PEM konvertieren

Um eine PKCS7-Datei (domain.p7b) in eine PEM-codierte Datei (domain.crt) zu konvertieren, geben Sie den folgenden Befehl in Ihrem Terminal ein:

 

  • Konvertieren von PEM in PKCS12

Um einen privaten Schlüssel (domain.key) und ein Zertifikat (domain.crt) in eine PKCS12-Datei (domain.pfx), geben Sie den folgenden Befehl ein:

Der Befehl fordert Sie auf, die Export-Passwörter einzugeben, die Sie optional leer lassen können. Sie können mehrere Zertifikate an die PKCS12-Datei anhängen, indem Sie die Zertifikate in einer einzigen PEM-Datei (domain.crt) verketten. PKCS12 ist auch als PFX bekannt und wird meistens in Microsoft IIS.

  • PKCS12 in PEM konvertieren

Um eine PKCS12-Datei (domain.pfx) in ein PEM-kodiertes Format (domain.combined.crt) zu konvertieren, geben Sie den folgenden Befehl ein:

Die durch den obigen Befehl erstellte PEM-Datei enthält alle Elemente, die in der PKCS12-Datei enthalten waren.

Abschnitt 7: Überprüfen der OpenSSL-Version

Die Version jeder von Ihnen ausgeführten Software kann sich auf die Funktionen der von Ihnen ausgeführten Anwendungen auswirken. Daher ist es notwendig, die Version zu ermitteln. Das Gleiche gilt für OpenSSL. Einige Befehlszeilenoptionen fehlen möglicherweise in einer Version und sind in einer anderen Version verfügbar. Um die Version von OpenSSL anzuzeigen, die Sie ausführen, geben Sie den folgenden Befehl ein:

Unten sehen Sie die Ausgabe, die wir erhalten haben, als wir den obigen Befehl während der Erstellung dieses Tutorials ausgeführt haben:

Unten finden Sie den tatsächlichen Screenshot:

OpenSSL

Fazit

In diesem Tutorial haben wir erklärt, was OpenSSL ist, haben Zertifikatsignierungsanforderungen (CSR) behandelt und einige der wichtigsten OpenSSL-Befehle vorgestellt, die Sie in Ihrer Serverumgebung verwenden können.

Fehlt uns ein wichtiger Befehl oder haben Sie Probleme mit einem der Befehle in Ihrem Server-Setup auf CloudSigma? Wenden Sie sich gerne an unser 24/7-Kundensupport-Team im Echtzeit-Chat, um dies zu besprechen.

Viel Spaß beim Computing!

author

Manpreet Singh

Autor · CloudSigma

Preslav Dobrev ist ein kreativer Designer bei CloudSigma und konzentriert sich auf eine konsistente Unternehmensidentität durch traditionelle und innovative Marketingkanäle. Er versteht es meisterhaft, künstlerische Vision mit strategischem Marketing zu verbinden, um wirkungsvolle Markengeschichten zu schaffen.

Kommentare

Noch keine Kommentare. Schreiben Sie den ersten.