Konvertieren Sie .pem in .crt und .key


371

Kann mir jemand den richtigen Weg / Befehl zum Extrahieren / Konvertieren der Zertifikat- .crtund privaten Schlüsseldateien .keyaus einer .pemDatei mitteilen ? Ich habe gerade gelesen, dass sie austauschbar sind, aber nicht wie.



Antworten:


500

Ich konnte pem folgendermaßen in crt konvertieren:

openssl x509 -outform der -in your-cert.pem -out your-cert.crt

13
Die Verwendung eines Texteditors ist nicht der beste Ansatz. So extrahieren Sie den Schlüssel in PKCS8-Form: openssl pkey -in mumble.pem -out mumble-key.pem Wenn die OpenSSL-Version älter als 1.0.0 ist, extrahieren Sie den Schlüssel als RSA-Schlüssel:openssl rsa -in mumble.pem -out mumble-key.pem
Andron

131
Ich habe Ihren Befehl ausprobiert, aber ich hatte:unable to load certificate 140584440387400:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE
Damien Carol

15
Der Schlüsselbefehl (openssl pkey -in mumble.pem -out mumble-key.pem) gibt Folgendes an: Schlüssel 129051320116880 kann nicht geladen werden: Fehler: 0906D06C: PEM-Routinen: PEM_read_bio: keine Startzeile: pem_lib.c: 703: Erwarten: ANY PRIVATE KEY
Mylord

2
openssl rsa -in your-cert.pem -outform pem -out your-key.pem
troyfolger

3
@Andron sowohl pkey als auch rsa geben mir Expecting: ANY PRIVATE KEYFehler.
Aero Wang

393

Konvertieren mit OpenSSL

Mit diesen Befehlen können Sie Zertifikate und Schlüssel in verschiedene Formate konvertieren, um sie mit bestimmten Servertypen oder Software kompatibel zu machen.

  • Konvertieren Sie eine DER-Datei (.crt .cer .der) in PEM

    openssl x509 -inform der -in certificate.cer -out certificate.pem
    
  • Konvertieren Sie eine PEM-Datei in DER

    openssl x509 -outform der -in certificate.pem -out certificate.der
    
  • Konvertieren Sie eine PKCS # 12-Datei (.pfx .p12), die einen privaten Schlüssel und Zertifikate enthält, in PEM

    openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes
    
    You can add -nocerts to only output the private key or add -nokeys to only output the certificates.
    
  • Konvertieren Sie eine PEM-Zertifikatdatei und einen privaten Schlüssel in PKCS # 12 (.pfx .p12).

    openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
    
  • PEM in CRT konvertieren (.CRT-Datei)

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

OpenSSL PEM konvertieren

  • Konvertieren Sie PEM in DER

    openssl x509 -outform der -in certificate.pem -out certificate.der
    
  • Konvertieren Sie PEM in P7B

    openssl crl2pkcs7 -nocrl -certfile certificate.cer -out certificate.p7b -certfile CACert.cer
    
  • Konvertieren Sie PEM in PFX

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

OpenSSL Convert DER

  • Konvertieren Sie DER in PEM

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

OpenSSL Convert P7B

  • Konvertieren Sie P7B in PEM

    openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
    
  • Konvertieren Sie P7B in 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
    

OpenSSL Konvertiert PFX

  • Konvertieren Sie PFX in PEM

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

Generieren Sie rsa-Schlüssel mit OpenSSL

  • Wenn Sie OpenSSL in der Befehlszeile verwenden, müssen Sie zuerst einen öffentlichen und einen privaten Schlüssel generieren. Sie sollten diese Datei mit dem Argument -passout mit einem Kennwort schützen. Es gibt viele verschiedene Formen, die dieses Argument annehmen kann. Lesen Sie dazu die OpenSSL-Dokumentation.

    openssl genrsa -out private.pem 1024
    
  • Dadurch wird eine Schlüsseldatei mit dem Namen private.pem erstellt, die 1024 Bit verwendet. Diese Datei enthält sowohl den privaten als auch den öffentlichen Schlüssel. Sie sollten also den öffentlichen Schlüssel aus dieser Datei extrahieren:

    openssl rsa -in private.pem -out public.pem -outform PEM -pubout
    
    or
    
    openssl rsa -in private.pem -pubout > public.pem
    
    or
    
    openssl rsa -in private.pem -pubout -out public.pem
    

    Sie haben jetzt public.pem, das nur Ihren öffentlichen Schlüssel enthält. Sie können diesen frei mit Dritten teilen. Sie können alles testen, indem Sie einfach etwas selbst mit Ihrem öffentlichen Schlüssel verschlüsseln und dann mit Ihrem privaten Schlüssel entschlüsseln. Zuerst benötigen wir ein paar Daten zum Verschlüsseln:

  • Beispieldatei:

    echo 'too many secrets' > file.txt
    
  • Sie haben jetzt einige Daten in file.txt und können diese mit OpenSSL und dem öffentlichen Schlüssel verschlüsseln:

    openssl rsautl -encrypt -inkey public.pem -pubin -in file.txt -out file.ssl
    
  • Dadurch wird eine verschlüsselte Version von file.txt erstellt, die als file.ssl bezeichnet wird. Wenn Sie sich diese Datei ansehen, handelt es sich nur um binären Junk, der für niemanden sehr nützlich ist. Jetzt können Sie es mit dem privaten Schlüssel entschlüsseln:

    openssl rsautl -decrypt -inkey private.pem -in file.ssl -out decrypted.txt
    
  • Sie haben jetzt eine unverschlüsselte Datei in decrypted.txt:

    cat decrypted.txt
    |output -> too many secrets
    

RSA TOOLS-Optionen in OpenSSL

  • NAME

    rsa - RSA-Schlüsselverarbeitungstool

  • ZUSAMMENFASSUNG

    openssl rsa [-help] [-inform PEM | NET | DER] [-outform PEM | NET | DER] [-in Dateiname] [-passin arg] [-out Dateiname] [-passout arg] [-aes128] [- aes192] [-aes256] [-camellia128] [-camellia192] [-camellia256] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-check] [-pubin] [-pubout] [-RSAPublicKey_in] [-RSAPublicKey_out] [-engine id]

  • BESCHREIBUNG

    Der Befehl rsa verarbeitet RSA-Schlüssel. Sie können zwischen verschiedenen Formularen konvertiert und ihre Komponenten ausgedruckt werden. Beachten Sie, dass dieser Befehl das traditionelle SSLeay-kompatible Format für die Verschlüsselung mit privaten Schlüsseln verwendet: Neuere Anwendungen sollten das sicherere PKCS # 8-Format mit dem Dienstprogramm pkcs8 verwenden.

  • BEFEHLSOPTIONEN

    -help
    

    Drucken Sie eine Nutzungsnachricht aus.

    -inform DER|NET|PEM
    

    Dies gibt das Eingabeformat an. Die DER-Option verwendet ein ASN1 DER-codiertes Formular, das mit dem PKCS # 1 RSAPrivateKey- oder SubjectPublicKeyInfo-Format kompatibel ist. Das PEM-Formular ist das Standardformat: Es besteht aus dem DER-Format base64, das mit zusätzlichen Kopf- und Fußzeilen codiert ist. Bei der Eingabe werden auch private Schlüssel im PKCS # 8-Format akzeptiert. Das NET-Formular ist ein Format, das im Abschnitt NOTES beschrieben wird.

    -outform DER|NET|PEM
    

    Dies gibt das Ausgabeformat an. Die Optionen haben dieselbe Bedeutung wie die Option -inform.

    -in filename
    

    Dies gibt den Eingabedateinamen an, aus dem ein Schlüssel oder eine Standardeingabe gelesen werden soll, wenn diese Option nicht angegeben ist. Wenn der Schlüssel verschlüsselt ist, wird eine Passphrase abgefragt.

    -passin arg
    

    die Passwortquelle der Eingabedatei. Weitere Informationen zum Format von arg finden Sie im Abschnitt PASS PHRASE ARGUMENTS in openssl.

    -out filename
    

    Dies gibt den Ausgabedateinamen an, in den ein Schlüssel oder eine Standardausgabe geschrieben werden soll, wenn diese Option nicht angegeben ist. Wenn Verschlüsselungsoptionen festgelegt sind, wird eine Passphrase abgefragt. Der Ausgabedateiname sollte nicht mit dem Eingabedateinamen übereinstimmen.

    -passout password
    

    die Kennwortquelle der Ausgabedatei. Weitere Informationen zum Format von arg finden Sie im Abschnitt PASS PHRASE ARGUMENTS in openssl.

    -aes128|-aes192|-aes256|-camellia128|-camellia192|-camellia256|-des|-des3|-idea
    

    Diese Optionen verschlüsseln den privaten Schlüssel mit der angegebenen Verschlüsselung, bevor sie ausgegeben werden. Eine Passphrase wird zur Eingabe aufgefordert. Wenn keine dieser Optionen angegeben ist, wird der Schlüssel im Klartext geschrieben. Dies bedeutet, dass die Verwendung des Dienstprogramms rsa zum Einlesen eines verschlüsselten Schlüssels ohne Verschlüsselungsoption zum Entfernen der Passphrase aus einem Schlüssel oder durch Festlegen der Verschlüsselungsoptionen zum Hinzufügen oder Ändern der Passphrase verwendet werden kann. Diese Optionen können nur mit Ausgabedateien im PEM-Format verwendet werden.

    -text
    

    druckt die verschiedenen öffentlichen oder privaten Schlüsselkomponenten zusätzlich zur codierten Version im Klartext aus.

    -noout
    

    Diese Option verhindert die Ausgabe der codierten Version des Schlüssels.

    -modulus
    

    Diese Option druckt den Wert des Moduls des Schlüssels aus.

    -check
    

    Diese Option überprüft die Konsistenz eines privaten RSA-Schlüssels.

    -pubin
    

    Standardmäßig wird ein privater Schlüssel aus der Eingabedatei gelesen: Mit dieser Option wird stattdessen ein öffentlicher Schlüssel gelesen.

    -pubout
    

    Standardmäßig wird ein privater Schlüssel ausgegeben: Mit dieser Option wird stattdessen ein öffentlicher Schlüssel ausgegeben. Diese Option wird automatisch festgelegt, wenn die Eingabe ein öffentlicher Schlüssel ist.

    -RSAPublicKey_in, -RSAPublicKey_out
    

    wie -pubin und -pubout, außer dass stattdessen das RSAPublicKey-Format verwendet wird.

    -engine id
    

    Wenn Sie eine Engine (anhand ihrer eindeutigen ID-Zeichenfolge) angeben, versucht rsa, eine Funktionsreferenz für die angegebene Engine abzurufen, und initialisiert sie bei Bedarf. Die Engine wird dann als Standard für alle verfügbaren Algorithmen festgelegt.

  • ANMERKUNGEN

    Das private PEM-Schlüsselformat verwendet die Kopf- und Fußzeilen:

    -----BEGIN RSA PRIVATE KEY-----
    
    -----END RSA PRIVATE KEY-----
    

    Das öffentliche PEM-Schlüsselformat verwendet die Kopf- und Fußzeilen:

    -----BEGIN PUBLIC KEY-----
    
    -----END PUBLIC KEY-----
    

    Das PEM RSAPublicKey-Format verwendet die Kopf- und Fußzeilen:

    -----BEGIN RSA PUBLIC KEY-----
    
    -----END RSA PUBLIC KEY-----
    

    Das NET-Formular ist ein Format, das mit älteren Netscape-Servern und Microsoft IIS-Schlüsseldateien kompatibel ist. Für die Verschlüsselung wird ungesalzenes RC4 verwendet. Es ist nicht sehr sicher und sollte daher nur bei Bedarf verwendet werden.

    Einige neuere Versionen von IIS enthalten zusätzliche Daten in den exportierten .key-Dateien. Um diese mit dem Dienstprogramm zu verwenden, zeigen Sie die Datei mit einem Binäreditor an und suchen Sie nach der Zeichenfolge "privater Schlüssel". Verfolgen Sie dann die Bytesequenz 0x30, 0x82 (dies ist eine ASN1-SEQUENZ). Kopieren Sie ab diesem Zeitpunkt alle Daten in eine andere Datei und verwenden Sie diese als Eingabe für das Dienstprogramm rsa mit der Option -inform NET.

    BEISPIELE

    So entfernen Sie die Passphrase für einen privaten RSA-Schlüssel:

     openssl rsa -in key.pem -out keyout.pem
    

    So verschlüsseln Sie einen privaten Schlüssel mit Triple DES:

     openssl rsa -in key.pem -des3 -out keyout.pem
    

    So konvertieren Sie einen privaten Schlüssel von PEM in das DER-Format:

      openssl rsa -in key.pem -outform DER -out keyout.der
    

    So drucken Sie die Komponenten eines privaten Schlüssels zur Standardausgabe aus:

      openssl rsa -in key.pem -text -noout
    

    So geben Sie einfach den öffentlichen Teil eines privaten Schlüssels aus:

      openssl rsa -in key.pem -pubout -out pubkey.pem
    

    Geben Sie den öffentlichen Teil eines privaten Schlüssels im RSAPublicKey-Format aus:

      openssl rsa -in key.pem -RSAPublicKey_out -out pubkey.pem
    

32
Dies beantwortet jedoch nicht die Frage, wie der private Schlüssel aus dem (exportierten) Binärzertifikat abgerufen werden kann.
bbaassssiiee

Vielen Dank. Sie fragen sich, ob ich eine PEM habe, die einen privaten Schlüssel und Zertifikate enthält. Wie kann ich nur Zertifikate erhalten? Ich weiß, dass ich den Zertifikatsteil mit dem Texteditor daraus kopieren kann, aber ich möchte wissen,
ob

46

So extrahieren Sie den Schlüssel und das Zertifikat aus einer PEM-Datei:

Schlüssel extrahieren

openssl pkey -in foo.pem -out foo.key

Eine andere Methode zum Extrahieren des Schlüssels ...

openssl rsa -in foo.pem -out foo.key

Extrahieren Sie alle Zertifikate, einschließlich der CA-Kette

openssl crl2pkcs7 -nocrl -certfile foo.pem | openssl pkcs7 -print_certs -out foo.cert

Extrahieren Sie das erste Textzertifikat als DER

openssl x509 -in foo.pem -outform DER -out first-cert.der

7
openssl x509 -outform der -in C: \ Benutzer \ Greg \ .ssh \ e360_stork_listener.pem -out C: \ Benutzer \ Greg \ .ssh \ e360_stork_listener.crt Zertifikat kann nicht geladen werden 4294956672: Fehler: 0906D06C: PEM-Routinen: PEM_read_bio: Keine Startzeile: pem_lib.c: 708: Erwarten: VERTRAUENES ZERTIFIKAT
user3217883

5

0. Voraussetzung : openssl sollte installiert sein. Wenn dies unter Windows Git Bashinstalliert ist, versuchen Sie es! Alternative Binärdateien finden Sie hier.

1. Auszug .keyaus .pem:

openssl pkey -in cert.pem -out cert.key

2. Auszug .crtaus .pem:

openssl crl2pkcs7 -nocrl -certfile cert.pem | openssl pkcs7 -print_certs -out cert.crt

1

Ein .crt speichert das Zertifikat .. im PEM-Format. Ein .pem kann also auch andere Dinge wie eine csr (Zertifikatsignierungsanforderung), einen privaten Schlüssel, einen öffentlichen Schlüssel oder andere Zertifikate enthalten, wenn es nur ein Zertifikat speichert, ist dasselbe wie eine .crt.

Ein PEM ist eine Basis-64-codierte Datei mit einer Kopf- und Fußzeile zwischen den einzelnen Abschnitten.

Um einen bestimmten Abschnitt zu extrahieren, ist ein Perl-Skript wie das folgende vollständig gültig. Sie können jedoch auch einige der openssl-Befehle verwenden.

 perl -ne "\$n++ if /BEGIN/; print if \$n == 1 && /BEGIN/.../END/;" mydomain.pem

Dabei kann == 1 in den gewünschten Abschnitt geändert werden. Wenn Sie die gewünschte Kopf- und Fußzeile genau kennen und nur eine davon in der Datei enthält (normalerweise, wenn Sie nur das Zertifikat und den Schlüssel darin behalten), können Sie dies natürlich vereinfachen:

 perl -ne "print if /^-----BEGIN CERTIFICATE-----\$/.../END/;" mydomain.pem

0

Wenn Sie diese Frage gestellt haben, weil Sie sie verwenden, besteht mkcertder Trick darin, dass die .pemDatei das Zertifikat und die -key.pemDatei der Schlüssel ist.

(Sie müssen nicht konvertieren, nur ausführen mkcert yourdomain.dev otherdomain.dev)

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.