Wie kann ich eine PEM-Datei aus einem SSL-Zertifikat erstellen?
Dies sind die Dateien, die mir zur Verfügung stehen:
.crt
server.csr
server.key
Wie kann ich eine PEM-Datei aus einem SSL-Zertifikat erstellen?
Dies sind die Dateien, die mir zur Verfügung stehen:
.crt
server.csr
server.key
Antworten:
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 -----BEGIN
und 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 rsa
anstelle 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.
cat server.crt server.key > server.pem
das 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.
server.crt server.key > server.includesprivatekey.pem
für SSL mit Haproxy 1.5 nützlich ist.
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
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/
Eine pem
Datei 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
-bash: server.key.pem: Permission denied
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
-----BEGIN RSA PRIVATE KEY-----
beginnt und mit einer beginnt -----BEGIN ENCRYPTED PRIVATE KEY-----
, ist dies der Befehl, den Sie verwenden möchten.
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
openssl x509
. Es wird ein gültiges PEM-Zertifikat ausgegeben: cat certificate.crt | openssl x509 > certificate.pem
sed -n '/--BEGIN/,$p' cert.crt
in 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 p
Befehl (print) auf Zeilen zwischen der ersten Zeile, die enthält, --BEGIN
und dem Ende der Datei ( $
) angewendet wird .
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.
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
An error occurred (MalformedCertificate) when calling the UploadServerCertificate operation: Unable to parse certificate. Please ensure the certificate is in PEM format.
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
openssl pkcs12 -in YOUR_CERTIFICATE.p12 -out YOUR_CERTIFICATE.pem -nodes -clcerts
.pem
.crt
.key
: Konvertieren in und .