Zertifikate – Ein Überblick der verschiedenen Formate

Digitale Zertifikate sind in der elektronischen Kommunikation weit verbreitet. Sie werden bei den TLS-Versionen (Transport Layer Security, Vorgängerbezeichnung SSL (Secure Sockets Layer)) diverser Übertragungsprotokolle verwendet und gewährleisten damit eine sichere Datenübertragung im Internet. Beispielsweise kommen X.509-Zertifikate zum Signieren und bzw. oder zum Verschlüsseln von Dokumenten sowie E-Mails zum Einsatz und werden auch beim Aufruf von Webseiten mit dem HTTPS-Protokoll verwendet.

X.509 ist ein Standard der ITU-T für eine Public-Key-Infrastruktur (PKI) zum Erstellen digitaler Zertifikate. X.509-Zertifikate werden umgangssprachlich häufig auch als SSL-Zertifikate bezeichnet. Nachfolgend ein kurzer Überblick über die vielen unterschiedlichen Datei- bzw. Container-Formate für X.509-Zertifikate.

PEM

Das PEM-Format ist sehr beliebt und wird auch häufig von Zertifizierungsstellen verwendet. Der Name PEM (Privacy Enhanced Mail) stammt von einer gescheiterten Methode für sichere E-Mails, welche in den RFCs 1421 bis 1424 definiert ist. Das Container-Format hat jedoch überlebt und wir immer noch gerne verwendet. Es ist Base64 kodiert und kann neben dem reinen Zertifikat auch Intermediate-Zertifikate, Root-CAs und private Schlüssel beinhalten. Apache-Server (/etc/ssl/certs) und Open-Source-Software setzen oft auf das PEM-Format.

Die Dateierweiterung .pem kommt meist zum Einsatz, wenn sowohl Zertifikate und der Privatschlüssel in einer Datei gespeichert werden. Darüber hinaus hat das PEM-Format auch noch folgende Dateiendungen: .cert, .cer, .crt oder .key.

CERT, CER oder CRT

.cert, .cer und .crt sind Dateien im PEM-Format (oder selten im DER-Format), welche lediglich eine andere Dateiendung besitzen. Diese Endungen kommen oft zum Einsatz, wenn zur Installation einzelne Dateien für jedes Zertifikat verlangt werden.

KEY

Die .key-Datei liegt ebenfalls im PEM-Format vor und beinhaltet nur den privaten Schlüssel eines Zertifikats. Sie kann von Hand aus einer .pem-Datei erzeugt werden. Dieses Dateiformat wird häufig in Verbindung mit Apache verwendet, wobei es meist unter „/etc/ssl/private“ zu finden ist. Die richtigen Dateirechte spielen in diesen Fall eine wichtige Rolle, da die Datei ansonsten oft nicht richtig geladen werden kann.

DER

DER steht für Distinguished Encoding Rules. Bei einer .der-Datei handelt es sich um die binäre Form der Base64-kodierten .pem-Datei. Neben .der können entsprechende Zertifikate auch mit der Endung .cer existieren, vor allem unter Windows. Neben Windows kommen Zertifikate im DER-Format auch unter Java zum Einsatz. Dieses Format unterstützt die Speicherung eines einzelnen Zertifikats. Private Schlüssel oder der Zertifizierungspfad können mit diesem Format nicht gespeichert werden.

PFX oder P12

Der PKCS#12-Standard ist in RFC 7292 beschrieben. Das binäre Format kann neben dem Zertifikat auch alle Zertifikate des Zertifizierungspfads und zudem den privaten Schlüssel enthalten. Alles in einer Datei. Darüber hinaus ist es möglich die  Datei passwortgeschützt zu speichern. Als Dateiendungen kommen .pfx oder .p12 zum Einsatz. Dieses Format wird oft zum Import und Export von Zertifikaten und privaten Schlüsseln unter Windows verwendet.

P7B oder P7C

Beide Dateiformate sind Bestandteil des PKCS#7-Standards, welcher seinerseits die Basis für S/MIME bildet und in RFC 5652 definiert ist. P7B und P7C werden in der Regel mit Base64 kodiert und können neben einem Zertifikat auch alle Zertifikate des Zertifizierungspfads enthalten. Im Gegensatz zu PEM existiert eine Definition, wie die Zertifikate des Zertifizierungspfads eingebunden werden müssen. Private Schlüssel sind nicht möglich. .p7b- und .p7c-Dateien sind unter Windows und in Apache Tomcat üblich.

CSR

Ein Certificate Signing Request (CSR, deutsch Zertifikatsignierungsanforderung) ist ein standardisiertes Format (PKCS#10, definiert in RFC 2986) zum Anfordern eines digitalen Zertifikats. Der CSR enthält den öffentlichen Schlüssel und weiteren Angaben über den Antragsteller des Zertifikats. Die Zertifizierungsanfrage kann anschließend von einer Zertifizierungsstelle (CA) signiert werden und man erhält ein digitales Zertifikat zurück.

CRL

Mit Hilfe einer Certificate Revocation List (deutsch Zertifikatsperrliste) können Zertifikate vor dem Ende des eigentlichen Ablaufdatums gesperrt werden. In der Regel ist dies der Fall, wenn der private Schlüssel nicht mehr sicher oder der Zertifikatsinhalt falsch ist.

Formate konvertieren

Mit Hilfe von OpenSSL lassen sich viele Formate schnell und einfach in ein anderes Format konvertieren.

PEM zu DER

openssl x509 -outform der -in certificate.pem -out certificate.der

PEM zu P7B

openssl crl2pkcs7 -nocrl -certfile certificate.cer -out certificate.p7b -certfile CACert.cer

PEM zu PFX

openssl pkcs12 -export -in certificate.crt -inkey privateKey.key -out certificate.pfx -certfile CACert.crt

PFX zu PEM

openssl pkcs12 -in certificate.pfx -out certificate.pem -nodes

DER zu PEM

openssl x509 -inform der -in certificate.cer -out certificate.pem

P7B zu PEM

openssl pkcs7 -print_certs -in certificate.p7b -out certificate.pem

P7B zu PFX

openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer openssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CACert.cer

CSR erstellen

openssl req -new -nodes -keyout host.domain.tld.key -out host.domain.tld.csr

Self-Signed

openssl req -x509 -days 1826 -new -nodes -keyout host.domain.tld.key -out host.domain.tld.crt -newkey rsa:4096 -sha256

Tobi

Hallo, mein Name ist Tobias und ich habe diesen Blog im April 2009 ins Leben gerufen. Seitdem blogge ich hier über Software, Internet, Windows und andere Themen, die mich interessieren. SSDblog ist mein zweiter Blog, indem es rund um das Thema SSDs geht. Ich würde mich freuen, wenn ihr meinen Feed abonniert oder mir auf Twitter, Facebook, Google+ und Google+ (privat) folgt.

2 Antworten

  1. Perfekt Tobi, danke für die Zusammenfassung.
    Du könntest bei den OpenSSL Befehlen noch hinzufügen, wie man einen CSR erstellt:
    openssl req -new -nodes -keyout host.domain.tld.key -out host.domain.tld.csr
    Bzw. wie man ein Self-Signed Certificate erstellt:
    openssl req -x509 -days 1826 -new -nodes -keyout host.domain.tld.key -out host.domain.tld.crt
    Dann wäre die Liste als Referenz komplett. 😉

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.