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:
|
1 2 3 4 5 6 7 |
Land Name (2 Buchstabe Code) [AU]:CH Bundesland oder Provinz Name (vollständiger Name) [Einige-Bundesland]:Züürich Ort Name (z. B., Stadt) []:Old Town Organisation Name (z. B., Firma) [Internet Widgits Pty Ltd]:Example Cloudsigma Unternehmen Organisationseinheit Name (z. B., Abteilung) []:Cloud Technology Common Name (z.B. Server FQDN oder IHR Name) []:cloudsigma.com E-Mail-Adresse []:info@cloudsigma.com |
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:
|
1 |
-subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
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:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr |
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:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
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):
|
1 |
openssl req -key domain.key -new -out domain.csr |
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:
|
1 |
openssl req -key domain.key -new -out domain.csr -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
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):
|
1 |
openssl x509 -in domain.crt -signkey domain.key -x509toreq -out domain.csr |
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:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -x509 -days 365 -out domain.crt |
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:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -x509 -days 365 -out domain.crt -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
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):
|
1 |
openssl req -key domain.key -new -x509 -days 365 -out domain.crt |
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:
|
1 |
openssl req -key domain.key -new -x509 -days 365 -out domain.crt -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
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:
|
1 |
openssl req -text -noout -verify -in domain.csr |
Der obige Befehl kann beispielsweise eine Ausgabe wie diese erzeugen:

- Anzeigen von Zertifikatseinträgen
Geben Sie den folgenden Befehl ein, um den Inhalt eines Zertifikats (domain.crt):
|
1 |
openssl x509 -text -noout -in domain.crt |
Der obige Befehl kann eine Ausgabe wie diese erzeugen:

- Ü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:
|
1 |
openssl verify -verbose -CAfile ca.crt domain.crt |
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:
|
1 |
openssl genrsa -des3 -out domain.key 2048 |
Der Befehl fordert Sie zur Eingabe eines Passworts auf, um den Vorgang abzuschließen. Siehe den Screenshot unten:

- Ü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:
|
1 |
openssl rsa -check -in domain.key |
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:

- Ü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:
|
1 2 3 |
openssl rsa -noout -modulus -in domain.key | openssl md5 openssl x509 -noout -modulus -in domain.crt | openssl md5 openssl req -noout -modulus -in domain.csr | openssl md5 |
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:
|
1 |
openssl rsa -des3 -in unencrypted.key -out encrypted.key |
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:
|
1 |
openssl rsa -in encrypted.key -out decrypted.key |
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:
|
1 |
openssl x509 -in domain.crt -outform der -out domain.der |
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:
|
1 |
openssl x509 -inform der -in domain.der -out domain.crt<code> |
- 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:
|
1 |
openssl crl2pkcs7 -nocrl -certfile domain.crt -certfile ca-chain.crt -out domain.p7b |
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:
|
1 |
openssl pkcs7 -in domain.p7b -print_certs -out domain.crt |
- 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:
|
1 |
openssl pkcs12 -inkey domain.key -in domain.crt -export -out domain.pfx |
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:
|
1 |
openssl pkcs12 -in domain.pfx -nodes -out domain.combined.crt |
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:
|
1 |
openssl version -a |
Unten sehen Sie die Ausgabe, die wir erhalten haben, als wir den obigen Befehl während der Erstellung dieses Tutorials ausgeführt haben:
|
1 2 3 4 5 6 7 8 |
OpenSSL 1.1.1i 8 Dec 2020 built on: Sat Dec 19 15:39:47 2020 UTC platform: linux-x86_64 options: bn(64,64) rc4(16x,int) des(int) idea(int) blowfish(ptr) compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DNDEBUG OPENSSLDIR: "/usr/local/ssl" ENGINESDIR: "/usr/local/lib/engines-1.1" Seeding source: os-specific |
Unten finden Sie den tatsächlichen Screenshot:

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!
Kommentare
Noch keine Kommentare. Schreiben Sie den ersten.