Wie bekomme ich .pem-Dateien aus .key- und .crt-Dateien?


Antworten:


799

Ihre Schlüssel haben möglicherweise bereits das PEM-Format, werden jedoch nur mit .crt oder .key benannt.

Wenn der Inhalt der Datei mit beginnt -----BEGINund Sie ihn in einem Texteditor lesen können:

Die Datei verwendet base64, das in ASCII und nicht im Binärformat lesbar ist. Das Zertifikat ist bereits im PEM-Format. Ändern Sie einfach die Erweiterung in .pem.

Wenn die Datei binär ist:

Für die Datei server.crt würden Sie verwenden

openssl x509 -inform DER -outform PEM -in server.crt -out server.crt.pem

Verwenden Sie für server.key openssl rsaanstelle von openssl x509.

Die Datei server.key ist wahrscheinlich Ihr privater Schlüssel, und die CRT-Datei ist das zurückgegebene, signierte x509-Zertifikat.

Wenn dies für einen Webserver gilt und Sie nicht angeben können, einen separaten privaten und öffentlichen Schlüssel zu laden:

Möglicherweise müssen Sie die beiden Dateien verketten. Für diesen Gebrauch:

cat server.crt server.key > server.includesprivatekey.pem

Ich würde empfehlen, Dateien mit "includeprivatekey" zu benennen, um die Berechtigungen zu verwalten, die Sie für diese Datei behalten.


2
Überprüfen Sie das Format der Datei server.key. Ich nahm nur an, dass es RSA war. Aber das Lesen der ersten Zeile der Datei wird Ihnen das wahrscheinlich sagen.
Maxwellb

10
Nur ein Heads-up, cat server.crt server.key > server.pemdas den offenen Kommentar nicht in eine eigene Zeile setzt, was eine Voraussetzung zu sein scheint. Kurierpost gab mir die Hölle und ich brauchte Stunden, um herauszufinden, was falsch lief.
Graham Walters

1
Danke Graham. Verschiedene Tools generieren die Dateien unterschiedlich, und letztendlich ist eine gewisse Überprüfung gut. Als ich diese Schritte ausführte, endeten die Dateien beispielsweise mit einem Zeilenumbruch.
Maxwellb

Der Tipp zum Verketten der .crt- und .key-Dateien war sehr hilfreich. Ich wollte mein Zertifikat mit stunnel3 verwenden, aber es gab keine Möglichkeit, die Schlüsseldatei anzugeben. Die Verwendung der Verkettung hat funktioniert. (Da stunnel3 ein Perl-Programm ist, habe ich selbst eine Option zum Lesen der Schlüsseldatei hinzugefügt. Da ich jedoch später sah, dass die Verkettung funktioniert hat, habe ich stunnel3 auf den ursprünglichen Code zurückgesetzt.)
LS

2
Nur eine Kleinigkeit zu sagen, dass Katze server.crt server.key > server.includesprivatekey.pemfür SSL mit Haproxy 1.5 nützlich ist.
jimm101

224

Ich musste dies für eine AWS ELB tun. Nachdem ich viele Male vom Dialog verprügelt wurde, hat das für mich endlich funktioniert:

openssl rsa -in server.key -text > private.pem
openssl x509 -inform PEM -in server.crt > public.pem

Danke NCZ

Edit: Wie @floatingrock sagt

Vergessen Sie bei AWS nicht, den Dateinamen mit voranzustellen file://. So sieht es aus:

 aws iam upload-server-certificate --server-certificate-name blah --certificate-body file://path/to/server.crt --private-key file://path/to/private.key --path /cloudfront/static/

http://docs.aws.amazon.com/cli/latest/reference/iam/upload-server-certificate.html


19
Vergessen Sie bei AWS nicht, den Dateinamen mit voranzustellen file://. So wird es aussehen:aws iam upload-server-certificate --server-certificate-name blah --certificate-body file://~/Desktop/server.crt --private-key file://~/Desktop/private.key --path /cloudfront/static/
FloatingRock

1
Der zweite Befehl tut nichts, wenn Ihre Eingabe eine PEM-Datei ist. Unter der Annahme, dass dies der Fall ist, benötigen Sie nur den ersten Befehl
Kristofer

Genial! Das hat bei mir gut funktioniert! Ich habe gerade meine .key- und .crt-Dateien mit Ihren Codezeilen in .pem konvertiert und dann über die AWS-Konsole hochgeladen (kopieren / einfügen). Vielen Dank!
Diego D

79

Eine pemDatei enthält das Zertifikat und den privaten Schlüssel. Dies hängt vom Format Ihres Zertifikats / Schlüssels ab, ist aber wahrscheinlich so einfach:

cat server.crt server.key > server.pem

Ich -bash: server.key.pem: Permission denied
bekomme

2
@tq: Das bedeutet, dass Sie diese Datei nicht lesen oder schreiben dürfen.
etw

danke @sth wird um Erlaubnis bitten. aber ich tat dies mit sudo befehlen
tq

8
@tq: cat server.crt server.key | sudo tee server.pem
dimir

2
Achten Sie auf fehlende Zeilenumbrüche. Unsere PEM-Datei enthält möglicherweise verstümmelte Zeilen wie ----- END CERTIFICATE ---------- BEGIN CERTIFICATE -----
Wolfgang Fahl

24

Wenn Sie nicht möchten, dass eine Passphrase abgefragt wird, müssen Sie den folgenden Befehl ausführen:

openssl rsa -in server.key -out server.key

9
Wenn Sie möchten, dass eine Datei mit -----BEGIN RSA PRIVATE KEY-----beginnt und mit einer beginnt -----BEGIN ENCRYPTED PRIVATE KEY-----, ist dies der Befehl, den Sie verwenden möchten.
Philippe Gerber

18

Dies ist die beste Option zum Erstellen einer PEM-Datei

openssl pkcs12 -in MyPushApp.p12 -out MyPushApp.pem -nodes -clcerts

4

Was ich beobachtet habe, ist: Wenn Sie openssl zum Generieren von Zertifikaten verwenden, werden sowohl der Textteil als auch der base64-Zertifikatsteil in der CRT-Datei erfasst. Das strenge PEM-Format besagt ( Wiki-Definition ), dass die Datei mit BEGIN und END beginnen und enden soll.

.pem - (Privacy Enhanced Mail) Base64-codiertes DER-Zertifikat, eingeschlossen zwischen "----- BEGIN CERTIFICATE -----" und "----- END CERTIFICATE -----"

Für einige Bibliotheken (die ich in Java gefunden habe), die ein striktes PEM-Format erwarten, würde die generierte CRT die Validierung als "ungültiges PEM-Format" nicht bestehen.

Selbst wenn Sie die Zeilen mit BEGIN / END CERTIFICATE kopieren oder grepen und in eine cert.pem-Datei einfügen, sollte dies funktionieren.

Folgendes mache ich, nicht sehr sauber, aber es funktioniert für mich. Im Grunde filtert es den Text ab der Zeile BEGIN:

grep -A 1000 BEGIN cert.crt> cert.pem


1
Eine andere Möglichkeit besteht darin, das nicht strenge Zertifikat einfach weiterzuleiten openssl x509. Es wird ein gültiges PEM-Zertifikat ausgegeben: cat certificate.crt | openssl x509 > certificate.pem
T0xicCode

Wenn Sie alles von "BEGIN" bis zum Ende der Datei erhalten möchten, ist dies ein Job für sed. Insbesondere möchten Sie so etwas wie sed -n '/--BEGIN/,$p' cert.crtin diesem Fall. Um dies zu erklären: Das "-n" weist sed an, standardmäßig nichts zu drucken, und dann bewirkt der Bereichsausdruck, /--BEGIN/,$dass der pBefehl (print) auf Zeilen zwischen der ersten Zeile, die enthält, --BEGINund dem Ende der Datei ( $) angewendet wird .
Dannysauer

4

Ich habe versucht, von Godaddy zu App Engine zu wechseln. Was hat der Trick getan, war diese Zeile zu verwenden:

openssl req -new -newkey rsa:2048 -nodes -keyout name.unencrypted.priv.key -out name.csr

Genau so wie es ist, aber den Namen durch meinen Domainnamen ersetzen (nicht, dass es wirklich wichtig wäre)

Und ich beantwortete alle Fragen zum allgemeinen Namen / zur Organisation als www.name.com

Dann öffnete ich die CSR, kopierte sie, fügte sie in go daddy ein, lud sie herunter, entpackte sie, navigierte zum entpackten Ordner mit dem Terminal und gab Folgendes ein:

cat otherfilegodaddygivesyou.crt gd_bundle-g2-g1.crt > name.crt

Dann habe ich die folgenden Anweisungen von Trouble with Google Apps Custom Domain SSL verwendet :

openssl rsa -in privateKey.key -text > private.pem
openssl x509 -inform PEM -in www_mydomain_com.crt > public.pem

genau wie es ist, außer dass ich anstelle von privateKey.key name.unencrypted.priv.key und anstelle von www_mydomain_com.crt name.crt verwendet habe

Dann habe ich die Datei public.pem für das "PEM-codierte X.509-Zertifikat" auf die Administratorkonsole hochgeladen und die Datei private.pem für den "nicht verschlüsselten privaten PEM-codierten RSA-Schlüssel" hochgeladen.

Und das hat endlich geklappt.


4

Der Versuch, ein GoDaddy-Zertifikat auf AWS hochzuladen, ist mehrmals fehlgeschlagen, aber am Ende war es ziemlich einfach. Sie müssen nichts in .pem konvertieren. Sie müssen nur sicherstellen, dass das GoDaddy-Bundle-Zertifikat in den Kettenparameter aufgenommen wird, z

aws iam upload-server-certificate
    --server-certificate-name mycert
    --certificate-body file://try2/40271b1b25236fd1.crt
    --private-key file://server.key
    --path /cloudfront/production/
    --certificate-chain file://try2/gdig2_bundle.crt

Und um Ihren vorherigen fehlgeschlagenen Upload zu löschen, können Sie dies tun

aws iam delete-server-certificate --server-certificate-name mypreviouscert

Dies hat bei mir nicht funktioniertAn error occurred (MalformedCertificate) when calling the UploadServerCertificate operation: Unable to parse certificate. Please ensure the certificate is in PEM format.
Adam Raudonis

4
  1. Zertifikat vom vorläufigen Portal von appleId herunterladen,
  2. Exportieren Sie das Zertifikat aus der Schlüsselkette und geben Sie den Namen an (Certificates.p12).
  3. Öffnen Sie das Terminal und gehen Sie zum Ordner, in dem Sie die Datei Certificates.p12 speichern.
  4. Führen Sie die folgenden Befehle aus:

    a) openssl pkcs12 -in Certificates.p12 -out CertificateName.pem -nodes,

    b) openssl pkcs12 -in Certificates.p12 -out pushcert.pem -nodes -clcerts

  5. Ihre .pem-Datei bereit "pushcert.pem".

0
  • Terminal öffnen.
  • Wechseln Sie zu dem Ordner, in dem sich Ihr Zertifikat befindet.
  • Führen Sie den folgenden Befehl aus, indem Sie den Namen durch Ihr Zertifikat ersetzen.

openssl pkcs12 -in YOUR_CERTIFICATE.p12 -out YOUR_CERTIFICATE.pem -nodes -clcerts

  • Hoffe es wird funktionieren !!
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.