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 -noout

openssl x509 -in <cert> -subject -noout — Zeigt nur den Subject (CN, O usw.) eines Zertifikats.

openssl x509 -in server.crt -subject -noout

openssl x509 -in <cert> -issuer -noout — Zeigt den Aussteller (Issuer) eines Zertifikats.

openssl x509 -in server.crt -issuer -noout

openssl x509 -in <cert> -dates -noout — Zeigt den Gültigkeitszeitraum (notBefore und notAfter).

openssl x509 -in server.crt -dates -noout

openssl x509 -in <cert> -fingerprint -sha256 -noout — Zeigt den SHA-256-Fingerprint eines Zertifikats.

openssl x509 -in server.crt -fingerprint -sha256 -noout

openssl x509 -in <cert> -serial -noout — Zeigt die Seriennummer eines Zertifikats.

openssl x509 -in server.crt -serial -noout

openssl x509 -in <cert> -ext subjectAltName -noout — Zeigt die Subject Alternative Names (SANs) eines Zertifikats.

openssl x509 -in server.crt -ext subjectAltName -noout

Entfernten 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:443

openssl 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.com

openssl 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 -noout

openssl s_client -connect <host>:443 -showcerts — Zeigt die vollständige Zertifikatskette des Servers.

openssl s_client -connect example.com:443 -showcerts </dev/null

openssl s_client -connect <host>:443 -status — Prüft den OCSP-Stapling-Status des Server-Zertifikats.

openssl s_client -connect example.com:443 -status </dev/null

openssl 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_3

openssl 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-SHA384

Schlü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 4096

openssl genrsa -aes256 -out <key> <bits> — Erzeugt einen mit Passphrase verschlüsselten privaten RSA-Schlüssel.

openssl genrsa -aes256 -out private.key 4096

openssl 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.key

openssl genpkey -algorithm ed25519 -out <key> — Erzeugt einen privaten Ed25519-Schlüssel.

openssl genpkey -algorithm ed25519 -out ed25519.key

openssl rsa -in <key> -pubout -out <pubkey> — Extrahiert den öffentlichen Schlüssel aus einem privaten Schlüssel.

openssl rsa -in private.key -pubout -out public.key

openssl rsa -in <key> -text -noout — Zeigt die Komponenten eines RSA-Schlüssels in menschenlesbarer Form.

openssl rsa -in private.key -text -noout

openssl 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.key

Zertifikatsanträ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.csr

openssl 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.csr

openssl req -in <csr> -text -noout — Zeigt den Inhalt eines CSR.

openssl req -in server.csr -text -noout

openssl req -verify -in <csr> — Prüft die Signatur eines CSR.

openssl req -verify -in server.csr

openssl 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 365

openssl 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 365

openssl 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.der

openssl 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.pem

openssl 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.crt

openssl 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 -nodes

openssl 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.pem

openssl 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.pem

Prüfung & Validierung

openssl verify -CAfile <ca> <cert> — Prüft ein Zertifikat gegen ein CA-Zertifikat.

openssl verify -CAfile ca.crt server.crt

openssl x509 -in <cert> -noout -checkend <seconds> — Prüft, ob ein Zertifikat innerhalb der angegebenen Sekunden abläuft.

openssl x509 -in server.crt -noout -checkend 2592000

openssl rsa -in <key> -check — Prüft die Konsistenz eines privaten RSA-Schlüssels.

openssl rsa -in private.key -check

openssl 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 md5

openssl 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 md5

Hashing & Kodierung

openssl dgst -sha256 <file> — Berechnet den SHA-256-Hash einer Datei.

openssl dgst -sha256 document.pdf

openssl 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.pdf

echo -n "<text>" | openssl dgst -sha256 — Hasht eine Zeichenkette mit SHA-256.

echo -n "hello" | openssl dgst -sha256

openssl base64 -in <file> — Base64-kodiert eine Datei.

openssl base64 -in image.png

openssl base64 -d -in <file> — Dekodiert eine Base64-kodierte Datei.

openssl base64 -d -in encoded.txt -out decoded.bin

Ver- 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.enc

openssl 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.txt

openssl 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.enc

openssl 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.txt

openssl rand -hex <bytes> — Erzeugt Zufallsbytes als Hexadezimal-String.

openssl rand -hex 32

openssl rand -base64 <bytes> — Erzeugt Zufallsbytes als Base64-String.

openssl rand -base64 32

Nützliche Abfragen

openssl version — Zeigt die installierte OpenSSL-Version.

openssl version -a

openssl list -cipher-algorithms — Listet alle verfügbaren Cipher-Algorithmen.

openssl list -cipher-algorithms

openssl list -digest-algorithms — Listet alle verfügbaren Digest-(Hash-)Algorithmen.

openssl list -digest-algorithms

openssl ecparam -list_curves — Listet alle unterstützten elliptischen Kurven.

openssl ecparam -list_curves

openssl 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.

Verwandte Kommandos

  • age – moderne, einfache Datei-Verschlüsselung
  • clamav – Open-Source-Virenscanner
  • fail2ban – sperrt Angreifer-IPs anhand von Log-Mustern