OpenSSL — TLS, Zertifikate und Kryptografie auf der Kommandozeile
Praxis-Guide zu OpenSSL — Zertifikate und CSRs erzeugen, Keys verwalten, TLS-Verbindungen testen, Dateien ver- und entschlüsseln und Hashes berechnen.
OpenSSL ist das Standard-Toolkit für TLS/SSL und Kryptografie auf der Kommandozeile. Mit einem einzigen Befehl erzeugst du Zertifikate und CSRs, verwaltest Schlüssel, testest TLS-Verbindungen oder ver- und entschlüsselst Dateien. Das Werkzeug beherrscht außerdem Hashes, HMAC und die Konvertierung zwischen Formaten wie PEM, DER und PKCS#12. Dieser Guide führt dich durch die Kommandos für den Alltag – von der Zertifikatsprüfung bis zur AES-Verschlüsselung. Behandle private Schlüssel dabei immer als Geheimnis: restriktive Dateirechte, starke Cipher und keine selbstsignierten Zertifikate im Produktivbetrieb.
Zertifikats-Informationen
openssl x509 -in <cert> -text -noout — Zeigt alle Details eines Zertifikats in menschenlesbarer Form an.
openssl x509 -in server.crt -text -nooutopenssl x509 -in <cert> -subject -noout — Zeigt nur den Subject (CN, O usw.) eines Zertifikats.
openssl x509 -in server.crt -subject -nooutopenssl x509 -in <cert> -issuer -noout — Zeigt den Aussteller (Issuer) eines Zertifikats.
openssl x509 -in server.crt -issuer -nooutopenssl x509 -in <cert> -dates -noout — Zeigt den Gültigkeitszeitraum (notBefore und notAfter).
openssl x509 -in server.crt -dates -nooutopenssl x509 -in <cert> -fingerprint -sha256 -noout — Zeigt den SHA-256-Fingerprint eines Zertifikats.
openssl x509 -in server.crt -fingerprint -sha256 -nooutopenssl x509 -in <cert> -serial -noout — Zeigt die Seriennummer eines Zertifikats.
openssl x509 -in server.crt -serial -nooutopenssl x509 -in <cert> -ext subjectAltName -noout — Zeigt die Subject Alternative Names (SANs) eines Zertifikats.
openssl x509 -in server.crt -ext subjectAltName -nooutEntfernten Server prüfen
openssl s_client -connect <host>:<port> — Verbindet sich mit einem entfernten Server und zeigt den SSL/TLS-Handshake samt Zertifikatskette.
openssl s_client -connect example.com:443openssl s_client -connect <host>:443 -servername <host> — Verbindet sich mit SNI (Server Name Indication) für virtuelle Hosts.
openssl s_client -connect example.com:443 -servername example.comopenssl s_client -connect <host>:443 | openssl x509 -text -noout — Holt das Zertifikat eines entfernten Servers und zeigt dessen Details an.
openssl s_client -connect example.com:443 </dev/null | openssl x509 -text -nooutopenssl s_client -connect <host>:443 -showcerts — Zeigt die vollständige Zertifikatskette des Servers.
openssl s_client -connect example.com:443 -showcerts </dev/nullopenssl s_client -connect <host>:443 -status — Prüft den OCSP-Stapling-Status des Server-Zertifikats.
openssl s_client -connect example.com:443 -status </dev/nullopenssl s_client -connect <host>:443 -tls1_3 — Erzwingt eine TLS-1.3-Verbindung, um die Protokoll-Unterstützung zu testen.
openssl s_client -connect example.com:443 -tls1_3openssl s_client -connect <host>:443 -cipher <cipher> — Testet, ob eine bestimmte Cipher-Suite unterstützt wird.
openssl s_client -connect example.com:443 -cipher ECDHE-RSA-AES256-GCM-SHA384Schlüssel erzeugen
openssl genrsa -out <key> <bits> — Erzeugt einen privaten RSA-Schlüssel. Die Datei ist unverschlüsselt – schütze sie mit restriktiven Dateirechten (chmod 600).
openssl genrsa -out private.key 4096openssl genrsa -aes256 -out <key> <bits> — Erzeugt einen mit Passphrase verschlüsselten privaten RSA-Schlüssel.
openssl genrsa -aes256 -out private.key 4096openssl ecparam -genkey -name prime256v1 -out <key> — Erzeugt einen privaten ECDSA-Schlüssel auf der P-256-Kurve.
openssl ecparam -genkey -name prime256v1 -out ec-private.keyopenssl genpkey -algorithm ed25519 -out <key> — Erzeugt einen privaten Ed25519-Schlüssel.
openssl genpkey -algorithm ed25519 -out ed25519.keyopenssl rsa -in <key> -pubout -out <pubkey> — Extrahiert den öffentlichen Schlüssel aus einem privaten Schlüssel.
openssl rsa -in private.key -pubout -out public.keyopenssl rsa -in <key> -text -noout — Zeigt die Komponenten eines RSA-Schlüssels in menschenlesbarer Form.
openssl rsa -in private.key -text -nooutopenssl rsa -in <encrypted_key> -out <decrypted_key> — Entfernt die Passphrase von einem verschlüsselten privaten Schlüssel. Der Schlüssel liegt danach ungeschützt auf der Platte – nur in kontrollierten Umgebungen einsetzen.
openssl rsa -in encrypted.key -out decrypted.keyZertifikatsanträge (CSR)
openssl req -new -key <key> -out <csr> — Erzeugt einen CSR aus einem bestehenden privaten Schlüssel.
openssl req -new -key private.key -out server.csropenssl req -new -newkey rsa:4096 -nodes -keyout <key> -out <csr> — Erzeugt privaten Schlüssel und CSR in einem Schritt. -nodes speichert den Schlüssel unverschlüsselt – nur in geschützten Umgebungen verwenden.
openssl req -new -newkey rsa:4096 -nodes -keyout server.key -out server.csropenssl req -in <csr> -text -noout — Zeigt den Inhalt eines CSR.
openssl req -in server.csr -text -nooutopenssl req -verify -in <csr> — Prüft die Signatur eines CSR.
openssl req -verify -in server.csropenssl req -new -key <key> -out <csr> -subj "/CN=<domain>" — Erzeugt einen CSR nicht-interaktiv mit Subject-Zeile.
openssl req -new -key server.key -out server.csr -subj "/CN=example.com/O=My Company/C=DE"openssl req -new -key <key> -out <csr> -addext "subjectAltName=DNS:<domain>" — Erzeugt einen CSR mit Subject Alternative Names (SANs).
openssl req -new -key server.key -out server.csr -addext "subjectAltName=DNS:example.com,DNS:www.example.com"Selbstsignierte Zertifikate
openssl req -x509 -newkey rsa:4096 -nodes -keyout <key> -out <cert> -days <days> — Erzeugt ein selbstsigniertes Zertifikat samt neuem Schlüssel in einem Schritt. Selbstsignierte Zertifikate nur für Tests oder interne Zwecke – Browser und Clients vertrauen ihnen nicht ohne manuelle Ausnahme.
openssl req -x509 -newkey rsa:4096 -nodes -keyout server.key -out server.crt -days 365openssl req -x509 -key <key> -in <csr> -out <cert> -days <days> — Erstellt ein selbstsigniertes Zertifikat aus einem bestehenden CSR.
openssl req -x509 -key server.key -in server.csr -out server.crt -days 365openssl req -x509 -newkey rsa:4096 -sha256 -nodes -keyout <key> -out <cert> -days 365 -subj "/CN=<domain>" -addext "subjectAltName=DNS:<domain>" — Einzeiler für ein selbstsigniertes Zertifikat mit SAN (moderne Browser verlangen SANs).
openssl req -x509 -newkey rsa:4096 -sha256 -nodes -keyout server.key -out server.crt -days 365 -subj "/CN=localhost" -addext "subjectAltName=DNS:localhost,IP:127.0.0.1"Zertifikate konvertieren
openssl x509 -in <cert.pem> -outform DER -out <cert.der> — Konvertiert ein PEM-Zertifikat ins DER-Format (binär).
openssl x509 -in server.crt -outform DER -out server.deropenssl x509 -in <cert.der> -inform DER -outform PEM -out <cert.pem> — Konvertiert ein DER-Zertifikat ins PEM-Format.
openssl x509 -in server.der -inform DER -outform PEM -out server.pemopenssl pkcs12 -export -out <pfx> -inkey <key> -in <cert> -certfile <ca> — Erstellt eine PKCS#12-/PFX-Datei aus Schlüssel, Zertifikat und optionaler CA-Kette.
openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt -certfile ca-chain.crtopenssl pkcs12 -in <pfx> -out <pem> -nodes — Extrahiert alle Zertifikate und Schlüssel aus einer PKCS#12-Datei. -nodes schreibt den Schlüssel unverschlüsselt.
openssl pkcs12 -in server.pfx -out server.pem -nodesopenssl pkcs12 -in <pfx> -clcerts -nokeys -out <cert> — Extrahiert nur das Client-Zertifikat aus einer PKCS#12-Datei.
openssl pkcs12 -in server.pfx -clcerts -nokeys -out cert.pemopenssl pkcs12 -in <pfx> -nocerts -nodes -out <key> — Extrahiert nur den privaten Schlüssel aus einer PKCS#12-Datei.
openssl pkcs12 -in server.pfx -nocerts -nodes -out key.pemPrüfung & Validierung
openssl verify -CAfile <ca> <cert> — Prüft ein Zertifikat gegen ein CA-Zertifikat.
openssl verify -CAfile ca.crt server.crtopenssl x509 -in <cert> -noout -checkend <seconds> — Prüft, ob ein Zertifikat innerhalb der angegebenen Sekunden abläuft.
openssl x509 -in server.crt -noout -checkend 2592000openssl rsa -in <key> -check — Prüft die Konsistenz eines privaten RSA-Schlüssels.
openssl rsa -in private.key -checkopenssl x509 -in <cert> -modulus -noout | openssl md5 — Ermittelt den Modulus-Hash eines Zertifikats (zum Abgleich mit dem Schlüssel, ob beide zusammenpassen).
openssl x509 -in server.crt -modulus -noout | openssl md5openssl rsa -in <key> -modulus -noout | openssl md5 — Ermittelt den Modulus-Hash eines Schlüssels (muss zum Zertifikats-Modulus passen).
openssl rsa -in server.key -modulus -noout | openssl md5Hashing & Kodierung
openssl dgst -sha256 <file> — Berechnet den SHA-256-Hash einer Datei.
openssl dgst -sha256 document.pdfopenssl dgst -md5 <file> — Berechnet den MD5-Hash einer Datei. MD5 und SHA1 gelten als kryptografisch gebrochen – für Sicherheitszwecke SHA-256 verwenden.
openssl dgst -md5 document.pdfecho -n "<text>" | openssl dgst -sha256 — Hasht eine Zeichenkette mit SHA-256.
echo -n "hello" | openssl dgst -sha256openssl base64 -in <file> — Base64-kodiert eine Datei.
openssl base64 -in image.pngopenssl base64 -d -in <file> — Dekodiert eine Base64-kodierte Datei.
openssl base64 -d -in encoded.txt -out decoded.binVer- und Entschlüsselung
openssl enc -aes-256-cbc -salt -pbkdf2 -in <file> -out <encrypted> — Verschlüsselt eine Datei mit AES-256-CBC und Passwort.
openssl enc -aes-256-cbc -salt -pbkdf2 -in secret.txt -out secret.encopenssl enc -d -aes-256-cbc -pbkdf2 -in <encrypted> -out <decrypted> — Entschlüsselt eine mit AES-256-CBC verschlüsselte Datei.
openssl enc -d -aes-256-cbc -pbkdf2 -in secret.enc -out secret.txtopenssl rsautl -encrypt -inkey <pubkey> -pubin -in <file> -out <encrypted> — Verschlüsselt eine kleine Datei mit einem öffentlichen RSA-Schlüssel.
openssl rsautl -encrypt -inkey public.key -pubin -in secret.txt -out secret.encopenssl rsautl -decrypt -inkey <privkey> -in <encrypted> -out <decrypted> — Entschlüsselt eine Datei mit einem privaten RSA-Schlüssel.
openssl rsautl -decrypt -inkey private.key -in secret.enc -out secret.txtopenssl rand -hex <bytes> — Erzeugt Zufallsbytes als Hexadezimal-String.
openssl rand -hex 32openssl rand -base64 <bytes> — Erzeugt Zufallsbytes als Base64-String.
openssl rand -base64 32Nützliche Abfragen
openssl version — Zeigt die installierte OpenSSL-Version.
openssl version -aopenssl list -cipher-algorithms — Listet alle verfügbaren Cipher-Algorithmen.
openssl list -cipher-algorithmsopenssl list -digest-algorithms — Listet alle verfügbaren Digest-(Hash-)Algorithmen.
openssl list -digest-algorithmsopenssl ecparam -list_curves — Listet alle unterstützten elliptischen Kurven.
openssl ecparam -list_curvesopenssl ciphers -v — Listet alle unterstützten Cipher-Suites mit Protokollversionen.
openssl ciphers -v 'TLSv1.3'openssl speed <algorithm> — Misst die Performance eines kryptografischen Algorithmus (Benchmark).
openssl speed aes-256-cbc sha256 Fazit
OpenSSL ist auf nahezu jedem Server vorinstalliert und bleibt das Referenz-Werkzeug, wenn es um TLS und Kryptografie geht. Wer die x509-, req- und s_client-Unterkommandos beherrscht, diagnostiziert Zertifikatsprobleme in Sekunden und automatisiert PKI-Aufgaben in CI/CD-Pipelines. Halte dich an moderne Algorithmen (SHA-256, AES-256, Ed25519), meide MD5/SHA1 und schütze private Schlüssel konsequent – dann ist OpenSSL ein verlässlicher Begleiter.
Weiterführende Links
- OpenSSL — offizielle Dokumentation – Referenz und Manpages (englisch)
- OpenSSL-Projekt – openssl.org – Projektseite und Dokumentations-Übersicht (englisch)
- OpenSSL – Wikipedia – Hintergrund und Geschichte