Was ist eine Pem-Datei und wie unterscheidet sie sich von anderen OpenSSL-generierten Schlüsseldateiformaten?

1343

Ich bin für die Wartung von zwei Debian-Servern verantwortlich. Jedes Mal, wenn ich etwas mit Sicherheitszertifikaten zu tun habe, google ich nach Tutorials und schlage weg, bis es endlich funktioniert.

Doch in meinen Recherchen kam ich oft in verschiedenen Dateiformaten ( .key, .csr, .pem) , aber ich habe nie in der Lage gewesen , eine gute Erklärung, was jedes Dateiformates Zweck ist zu finden.

Ich habe mich gefragt, ob die guten Leute hier bei ServerFault etwas Klarheit in dieser Angelegenheit bringen könnten.

Noah Goodrich
quelle

Antworten:

1654

SSL gibt es schon lange genug, man könnte meinen, es würden Containerformate vereinbart. Und da hast du recht. Es gibt zu viele Standards. Das ist es, was ich weiß und ich bin sicher, dass andere mitmachen werden.

  • .csr - Dies ist eine Zertifikatsignierungsanforderung. Einige Anwendungen können diese für die Übermittlung an Zertifizierungsstellen generieren. Das aktuelle Format ist PKCS10, das in RFC 2986 definiert ist . Es enthält einige / alle Schlüsseldetails des angeforderten Zertifikats wie Betreff, Organisation, Status, usw. sowie den öffentlichen Schlüssel des zu signierenden Zertifikats. Diese werden von der CA signiert und ein Zertifikat wird zurückgesandt. Das zurückgegebene Zertifikat ist das öffentliche Zertifikat (das den öffentlichen Schlüssel, aber nicht den privaten Schlüssel enthält), das in verschiedenen Formaten vorliegen kann.
  • .pem - In den RFCs 1421 bis 1424 definiert , ist dies ein Containerformat, das möglicherweise nur das öffentliche Zertifikat enthält (z. B. bei Apache-Installationen und CA-Zertifikatdateien /etc/ssl/certs) oder eine gesamte Zertifikatkette, einschließlich öffentlichem Schlüssel, privatem Schlüssel und Stammzertifikate. Verwirrenderweise kann es auch eine CSR (z. B. wie hier verwendet ) codieren, da das PKCS10-Format in PEM übersetzt werden kann. Der Name stammt von Privacy Enhanced Mail (PEM) , einer fehlgeschlagenen Methode für sichere E-Mails, aber das verwendete Containerformat ist gültig und basiert auf einer Base64-Übersetzung der x509-ASN.1-Schlüssel.
  • .key - Dies ist eine PEM-formatierte Datei, die nur den privaten Schlüssel eines bestimmten Zertifikats enthält und lediglich einen herkömmlichen und keinen standardisierten Namen hat. In Apache-Installationen befindet sich dies häufig in /etc/ssl/private. Die Rechte für diese Dateien sind sehr wichtig, und einige Programme lehnen es ab, diese Zertifikate zu laden, wenn sie falsch eingestellt sind.
  • .pkcs12 .pfx .p12 - Ursprünglich von RSA in den Public-Key Cryptography Standards (abgekürzt PKCS) definiert, wurde die Variante "12" ursprünglich von Microsoft erweitert und später als RFC 7292 eingereicht . Dies ist ein kennwortgeschütztes Containerformat, das sowohl öffentliche als auch private Zertifikatpaare enthält. Im Gegensatz zu PEM-Dateien ist dieser Container vollständig verschlüsselt. Openssl kann dies in eine .pem-Datei mit öffentlichen und privaten Schlüsseln umwandeln:openssl pkcs12 -in file-to-convert.p12 -out converted-file.pem -nodes

Einige andere Formate, die von Zeit zu Zeit angezeigt werden:

  • .der - Eine Möglichkeit, ASN.1-Syntax in Binärform zu codieren: Eine .pem-Datei ist nur eine Base64-codierte .der-Datei. OpenSSL kann diese in .pem ( openssl x509 -inform der -in to-convert.der -out converted.pem) konvertieren . Windows sieht diese als Zertifikatsdateien. Standardmäßig exportiert Windows Zertifikate als .DER-formatierte Dateien mit einer anderen Erweiterung. Mögen...
  • .cert .cer .crt - Eine mit .pem (oder seltener mit .der) formatierte Datei mit einer anderen Erweiterung, die vom Windows Explorer als Zertifikat erkannt wird, was mit .pem nicht der Fall ist.
  • .p7b .keystore - In RFC 2315 als PKCS-Nummer 7 definiert. Dieses Format wird von Windows für den Zertifikatsaustausch verwendet. Java versteht dies von Haus aus und verwendet es .keystorestattdessen häufig als Erweiterung. Im Gegensatz zu .pem Stil Zertifikate, hat dieses Format eine definierte Art und Weise Zertifizierungspfad - Zertifikate enthalten.
  • .crl - Eine Zertifikatswiderrufsliste. Zertifizierungsstellen erstellen diese, um Zertifikate vor Ablauf zu deaktivieren. Sie können sie manchmal von CA-Websites herunterladen.

Zusammenfassend gibt es vier verschiedene Möglichkeiten, Zertifikate und deren Komponenten zu präsentieren:

  • PEM - Von RFCs gesteuert, wird es bevorzugt von Open-Source-Software verwendet. Es kann eine Vielzahl von Erweiterungen haben (.pem, .key, .cer, .cert, more)
  • PKCS7 - Ein offener Standard, der von Java verwendet und von Windows unterstützt wird. Enthält kein privates Schlüsselmaterial.
  • PKCS12 - Ein privater Microsoft-Standard, der später in einem RFC definiert wurde und im Vergleich zum PEM-Format für Klartext eine verbesserte Sicherheit bietet. Dies kann privates Schlüsselmaterial enthalten. Es wird bevorzugt von Windows-Systemen verwendet und kann mithilfe von openssl frei in das PEM-Format konvertiert werden.
  • DER - Das übergeordnete Format von PEM. Es ist nützlich, sich das als eine binäre Version der Base64-codierten PEM-Datei vorzustellen. Wird außerhalb von Windows nicht routinemäßig verwendet.

Ich hoffe das hilft.

sysadmin1138
quelle
297
Das Tolle an Standards ist, dass so viele zur Auswahl stehen ...
squillman
36
.crt ist eine weitere verbreitete Erweiterung für .cert und .cer
David Pashley
44
PEM ist ein Dateiformat, das aus einem Zertifikat (auch bekannt als öffentlicher Schlüssel), einem privaten Schlüssel oder beiden zusammengesetzten bestehen kann. Achten Sie nicht so sehr auf die Dateierweiterung. es bedeutet Privacy Enhanced Mail, eine Verwendung, für die es nicht viel Verwendung fand, aber das Dateiformat steckte herum.
Dan Carley
20
Sehr nützliche Antwort, aber ich glaube nicht, dass Sie das von erstellte PUB-Format behandelt haben ssh-keygen. Es wäre nützlich zu wissen, wie das mit dem Rest zusammenhängt.
Jez
24
Wenn Sie "Privacy Enhanced Email" bemerken, wird das Akronym "PEE" anstelle von "PEM" verwendet. Die RFCs neigen dazu, den Ausdruck "Privacy Enhanced Mail" zu verwenden
aidan
141

PEM allein ist kein Zertifikat, sondern nur eine Methode zum Codieren von Daten. X.509-Zertifikate sind ein Datentyp, der üblicherweise mit PEM codiert wird.

PEM ist ein X.509-Zertifikat (dessen Struktur mit ASN.1 definiert wird), das mit ASN.1 DER (Distinguished Encoding Rules) codiert wird, anschließend die Base64-Codierung durchläuft und zwischen Ankerzeilen im Klartext (BEGIN CERTIFICATE und END CERTIFICATE) eingefügt wird ).

Sie können dieselben Daten mithilfe der PKCS # 7- oder PKCS # 12-Darstellungen darstellen. Dazu können Sie das Befehlszeilendienstprogramm openssl verwenden.

Der offensichtliche Vorteil von PEM besteht darin, dass es sicher in den Text einer E-Mail-Nachricht eingefügt werden kann, da es Ankerlinien enthält und 7-Bit-Clean ist.

RFC1422 enthält weitere Details zum PEM-Standard in Bezug auf Schlüssel und Zertifikate.

James F
quelle
1
Wie machst du das "using openssl command line"?
Samik R
2
Um eine DER - Datei (.crt cer .der) zu PEM umwandeln: openssl x509 -inform der -in cert.cer -out cert.pem. Um eine PEM - Datei konvertieren DIE: openssl x509 -outform der -in cert.pem -out certi.der. So konvertieren Sie einen privaten Schlüssel und Zertifikate PEM eine PKCS # 12 - Datei (PFX P12) enthält: openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes. So konvertieren Sie eine PEM-Zertifikatdatei und einen privaten Schlüssel in PKCS # 12 (.pfx .p12): openssl pkcs12 -export -out cert.pfx -inkey privateKey.key -in cert.crt -certfile CACert.crtVon hier
mpeac
54

Manchmal ist eine .crtDatei bereits eine .pem. Siehe: https://stackoverflow.com/questions/991758/openssl-pem-key

mgold
quelle
4
In der Tat habe ich das heute gerade bemerkt. Ich musste ein PEM-Zertifikat in Rackspace Loadbalancer eingeben und fragte mich, ob das generierte CRT in diesem Format vorliegt. Aber es hat so funktioniert, also war das auch meine Schlussfolgerung, die meisten dieser .crt-Dateien scheinen im PEM-Format zu sein.
Glenn Plas
@GlennPlas konzentriert sich auf den Inhalt der Datei, nicht auf den Namen oder die Erweiterung. Es könnte .foobarfür alles, was zählt , aufgerufen werden ...
Patrick Mevzek