OpenSSL ist die wichtigste Kommandozeilen-Werkzeugsammlung für Transport Layer Security (TLS). Mit ihr erzeugt man Schlüsselpaare und Zertifikate, prüft Zertifikatsdateien und testet TLS-Verbindungen zu Servern. Die Bibliothek steckt praktisch überall: im Apache- und Nginx-Webserver, in OpenSSH, in Python und in zahllosen VPN- und Mail-Programmen.
Schlüsselpaar und Zertifikat erzeugen
Ein selbstsigniertes Zertifikat mit neuem Schlüssel entsteht in einem Schritt:
openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 365 -subj "/CN=example.de"
Dabei steht -nodes für "no DES" und lässt den privaten Schlüssel unverschlüsselt (nur für Testzwecke). Moderne Schlüssel erzeugt man getrennt mit openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:3072 -out key.pem; der ältere Befehl openssl genrsa -out key.pem 2048 funktioniert weiterhin. Einen Certificate Signing Request (CSR) für eine echte Zertifizierungsstelle stellt man mit openssl req -new -key key.pem -out request.csr aus.
Zertifikate prüfen
openssl x509 -in cert.pem -text -noout
openssl x509 -in cert.pem -dates -subject -issuer -noout
openssl verify -CAfile ca.pem server.pem
Die häufigste Fehlerquelle bei Web-Servern ist ein abgelaufenes oder unvollständiges Zertifikat — -dates zeigt Gültigkeitsbeginn und -ende, -issuer die ausstellende Stelle.
Live-TLS-Verbindung testen
openssl s_client -connect example.de:443 -servername example.de
s_client ist der klassische Weg, um zu sehen, welches Zertifikat ein Server wirklich ausliefert und welche TLS-Version ausgehandelt wird. Das -servername-Argument ist bei virtuellen Hosts Pflicht (SNI).
Dateien ver- und entschlüsseln
openssl enc -aes-256-cbc -salt -in datei.txt -out datei.enc
openssl dgst -sha256 datei.txt
enc verschlüsselt Dateien symmetrisch, dgst berechnet Prüfsummen beziehungsweise Signaturen. Seit OpenSSL 3.0 (September 2021) ist das Kommandozeilen-Verhalten strenger: Der MD5-basierte -md5-Standard von enc wurde abgeschafft, unsichere Algorithmen wie der 1024-Bit-Diffie-Hellman-Parameter werden abgelehnt.
Formate umwandeln
openssl pkcs12 -export -in cert.pem -inkey key.pem -out bundle.p12
openssl pkcs12 -in bundle.p12 -nodes -out combined.pem
Der PKCS12-Austausch (Dateiendung .p12 beziehungsweise .pfx) ist das Bindeglied zwischen OpenSSL-Welt und Java-Keystores — dort importiert man genau solche Dateien per keytool. Wer E-Mails nach dem offenen OpenPGP-Standard verschlüsselt, nutzt statt OpenSSL das Schwesterwerkzeug GPG.
Verwandte Grundlagen: Keytool-Befehle, SSL/TLS, X.509-Zertifikate.