Zertifikatsformate & OpenSSL
Welches Format wofür gedacht ist, woran man es erkennt – und wie man selbst umwandelt.
Die Formate im Überblick
| Format | Endungen | Erkennbar an | Enthält | Typisch für |
|---|---|---|---|---|
| PEM | .pem .crt .cer .key | Text mit -----BEGIN …----- | Zertifikate, Kette, Schlüssel – einzeln oder zusammen | nginx, Apache, HAProxy, Linux allgemein |
| DER | .der .cer | Binärdatei, im Editor unlesbar | genau ein Zertifikat oder ein Schlüssel | Java, Windows-Import einzelner Zertifikate, Embedded-Geräte |
| PKCS#7 / P7B | .p7b .p7c | -----BEGIN PKCS7----- oder binär | Zertifikate und Kette, kein Schlüssel | Windows, Tomcat, Download von Zwischenzertifikaten |
| PKCS#12 / PFX | .pfx .p12 | Binär, passwortgeschützt | Zertifikat, Kette und Schlüssel in einer Datei | Windows/IIS, Azure, Exchange, macOS-Schlüsselbund, moderne Java-Keystores |
| JKS | .jks .keystore | Binär, beginnt mit FE ED FE ED | Schlüssel und Zertifikate unter Aliasnamen | Tomcat, ältere Java-Anwendungen (seit Java 9 ist PKCS#12 Standard) |
| OpenSSH-Schlüssel | id_rsa, id_ed25519, id_ecdsa | -----BEGIN OPENSSH PRIVATE KEY----- | privater Schlüssel für SSH | SSH-Logins, Git, Server |
| PuTTY | .ppk | Text, beginnt mit PuTTY-User-Key-File- | privater + öffentlicher Schlüssel | PuTTY, WinSCP, FileZilla unter Windows |
Die Endung allein ist nicht verlässlich: Eine .cer-Datei kann PEM oder DER sein. Der Konverter erkennt das Format deshalb am Inhalt.
Begriffe
- Endzertifikat – das Zertifikat für Ihre Domain.
- Zwischenzertifikat – verbindet Ihr Zertifikat mit der Root-CA. Muss vom Server mitgeschickt werden, sonst melden manche Clients „nicht vertrauenswürdig“.
- Root-CA – ist in Browsern und Betriebssystemen bereits hinterlegt und muss vom Server normalerweise nicht mitgeschickt werden.
- fullchain – Endzertifikat + Zwischenzertifikate in einer Datei (z. B. für nginx).
OpenSSL-Befehle
Nach jeder Prüfung oder Umwandlung zeigt der Konverter die passenden Befehle für Ihre Dateien an. Hier die allgemeine Übersicht. Unter Windows ist OpenSSL z. B. in Git for Windows enthalten; keytool gehört zu jedem Java.
PEM →
# PEM nach DER openssl x509 -in cert.pem -outform der -out cert.der openssl pkey -in key.pem -outform der -out key.der # PEM nach P7B (Zertifikat + Kette) openssl crl2pkcs7 -nocrl -certfile cert.pem -certfile chain.pem -out certificate.p7b # PEM nach PFX openssl pkcs12 -export -inkey key.pem -in cert.pem -certfile chain.pem -out certificate.pfx # PFX für alte Systeme (Windows Server ≤ 2016, Java ≤ 8) openssl pkcs12 -export -inkey key.pem -in cert.pem -certfile chain.pem \ -certpbe PBE-SHA1-3DES -keypbe PBE-SHA1-3DES -macalg sha1 -out certificate.pfx # Alles in eine PEM-Datei (Windows: type statt cat) cat cert.pem chain.pem key.pem > certificate.pem
DER →
openssl x509 -inform der -in cert.der -out cert.pem openssl pkey -inform der -in key.der -out key.pem
P7B →
# P7B nach PEM (bei binärer P7B zusätzlich -inform der) openssl pkcs7 -print_certs -in certificate.p7b -out certs.pem # P7B + Schlüssel nach PFX openssl pkcs7 -print_certs -in certificate.p7b -out certs.pem openssl pkcs12 -export -inkey key.pem -in certs.pem -out certificate.pfx
PFX →
# bei alten PFX-Dateien mit OpenSSL 3: zusätzlich -legacy openssl pkcs12 -in certificate.pfx -clcerts -nokeys -out cert.pem openssl pkcs12 -in certificate.pfx -cacerts -nokeys -out chain.pem openssl pkcs12 -in certificate.pfx -nocerts -nodes -out key.pem # Schlüssel unverschlüsselt! # PFX nach JKS keytool -importkeystore -srckeystore certificate.pfx -srcstoretype PKCS12 \ -destkeystore keystore.jks -deststoretype JKS
JKS →
# JKS nach PFX, danach wie oben weiter nach PEM keytool -importkeystore -srckeystore keystore.jks -srcstoretype JKS \ -destkeystore certificate.p12 -deststoretype PKCS12
SSH-Schlüssel →
# OpenSSH-Schlüssel nach PEM (PKCS#8) – auf einer Kopie, fragt ggf. nach dem Passwort cp id_ed25519 key.pem && ssh-keygen -p -m PKCS8 -N "" -f key.pem # PuTTY-Schlüssel nach PEM (puttygen aus dem PuTTY-Paket) puttygen key.ppk -O private-openssh -o key.pem
Prüfen
# Inhalt eines Zertifikats anzeigen openssl x509 -in cert.pem -noout -subject -issuer -dates -ext subjectAltName # Passen Schlüssel und Zertifikat zusammen? (beide Ausgaben müssen gleich sein) openssl x509 -in cert.pem -noout -pubkey | openssl sha256 openssl pkey -in key.pem -pubout | openssl sha256 # Kette prüfen openssl verify -untrusted chain.pem cert.pem # Sperrstatus per OCSP (Adresse steht im Zertifikat: openssl x509 -noout -ocsp_uri) openssl ocsp -issuer chain.pem -cert cert.pem -url http://ocsp.example.com -resp_text # Mailserver mit STARTTLS prüfen openssl s_client -connect mail.example.com:587 -starttls smtp -servername mail.example.com