OpenSSL ist das Schweizer Taschenmesser fuer SSL/TLS-Zertifikate. Jeder andere Artikel auf dieser Seite verweist auf OpenSSL-Befehle — diese Seite fasst sie alle an einem Ort zusammen.
Zertifikat pruefen
Zertifikatsdetails anzeigen (Remote-Server)
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -text
Ablaufdatum pruefen
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -enddate
Subject und SANs pruefen
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -subject -ext subjectAltName
Aussteller pruefen (welche CA)
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -issuer
Lokale Zertifikatsdatei pruefen
openssl x509 -in cert.pem -noout -text
openssl x509 -in cert.pem -noout -dates # Nur die Daten
openssl x509 -in cert.pem -noout -subject # Nur der Subject
openssl x509 -in cert.pem -noout -ext subjectAltName # Nur die SANs
Zertifikatskette verifizieren
Kettenstaendigkeit pruefen (Remote)
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null
# Achten Sie auf:
# Verify return code: 0 (ok) <- Kette ist vollstaendig
# Verify return code: 21 (unable to verify) <- Kette ist unvollstaendig
Zertifikat gegen eine Kettendatei verifizieren
openssl verify -CAfile chain.pem cert.pem
# Erwartet: cert.pem: OK
Pruefen, ob Zertifikat und Schluessel uebereinstimmen
# Diese beiden Hashes muessen identisch sein
openssl x509 -noout -modulus -in cert.pem | openssl md5
openssl rsa -noout -modulus -in privkey.pem | openssl md5
# Fuer ECDSA-Schluessel:
openssl ec -in privkey.pem -pubout 2>/dev/null | openssl md5
openssl x509 -in cert.pem -pubkey -noout | openssl md5
Schluessel generieren
ECDSA P-256 (empfohlen)
openssl ecparam -genkey -name prime256v1 -noout -out privkey.pem
RSA 2048
openssl genrsa -out privkey.pem 2048
RSA 4096
openssl genrsa -out privkey.pem 4096
CSR generieren
ECDSA
openssl req -new -key privkey.pem -out csr.pem -subj "/CN=example.com"
Mit SANs (Multi-Domain)
openssl req -new -key privkey.pem -out csr.pem \
-subj "/CN=example.com" \
-addext "subjectAltName=DNS:example.com,DNS:www.example.com"
CSR ueberpruefen
openssl req -in csr.pem -noout -text
Zwischen Formaten konvertieren
PEM -> PFX (fuer Windows/IIS)
openssl pkcs12 -export -out cert.pfx -inkey privkey.pem -in cert.pem -certfile chain.pem
PFX -> PEM
openssl pkcs12 -in cert.pfx -clcerts -nokeys -out cert.pem
openssl pkcs12 -in cert.pfx -nocerts -nodes -out privkey.pem
openssl pkcs12 -in cert.pfx -cacerts -nokeys -out chain.pem
PEM -> DER
openssl x509 -in cert.pem -outform DER -out cert.der
DER -> PEM
openssl x509 -in cert.der -inform DER -outform PEM -out cert.pem
Zertifikatsformate erklaert ->
TLS-Verbindungen debuggen
Testen, welche TLS-Version ausgehandelt wird
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | grep "Protocol"
Eine bestimmte TLS-Version testen
# TLS 1.2 testen
echo | openssl s_client -connect example.com:443 -servername example.com -tls1_2 2>/dev/null | grep "Protocol"
# TLS 1.3 testen
echo | openssl s_client -connect example.com:443 -servername example.com -tls1_3 2>/dev/null | grep "Protocol"
Den vollstaendigen Handshake anzeigen
openssl s_client -connect example.com:443 -servername example.com -msg
Unterstuetzte Cipher Suites pruefen
# Alle Ciphers auflisten, die der Server akzeptiert
nmap --script ssl-enum-ciphers -p 443 example.com
Selbstsigniertes Zertifikat generieren (nur fuer Entwicklung)
openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:P-256 \
-keyout key.pem -out cert.pem -days 365 -nodes \
-subj "/CN=localhost" \
-addext "subjectAltName=DNS:localhost,IP:127.0.0.1"
Fuer vertrauenswuerdiges localhost-HTTPS verwenden Sie stattdessen mkcert.
fullchain.pem aus separaten Dateien erstellen
cat cert.pem chain.pem > fullchain.pem
Die Reihenfolge ist wichtig: zuerst Ihr Zertifikat, dann die Zwischenzertifikate.
Haeufig gestellte Fragen
Wie installiere ich OpenSSL?
Die meisten Linux-Distributionen enthalten es bereits. Auf macOS: brew install openssl. Auf Windows: Installation ueber Git for Windows (enthaelt OpenSSL) oder Chocolatey (choco install openssl).
Was ist der Unterschied zwischen openssl x509 und openssl s_client?
x509 liest eine lokale Zertifikatsdatei. s_client verbindet sich mit einem Remote-Server und ruft dessen Zertifikat ab. Verwenden Sie s_client, um einen Live-Server zu pruefen; verwenden Sie x509, um eine Datei auf der Festplatte zu inspizieren.
Warum zeigen meine Befehle “unable to load certificate” an?
Die Datei ist wahrscheinlich DER-kodiert (binaer), nicht PEM (Text). Fuegen Sie -inform DER zum Befehl hinzu:
openssl x509 -in cert.der -inform DER -noout -text