Kann mir jemand den richtigen Weg / Befehl zum Extrahieren / Konvertieren der Zertifikat- .crt
und privaten Schlüsseldateien .key
aus einer .pem
Datei mitteilen ? Ich habe gerade gelesen, dass sie austauschbar sind, aber nicht wie.
Kann mir jemand den richtigen Weg / Befehl zum Extrahieren / Konvertieren der Zertifikat- .crt
und privaten Schlüsseldateien .key
aus einer .pem
Datei mitteilen ? Ich habe gerade gelesen, dass sie austauschbar sind, aber nicht wie.
Antworten:
Ich konnte pem folgendermaßen in crt konvertieren:
openssl x509 -outform der -in your-cert.pem -out your-cert.crt
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
unable to load certificate 140584440387400:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE
Expecting: ANY PRIVATE KEY
Fehler.
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
So extrahieren Sie den Schlüssel und das Zertifikat aus einer PEM-Datei:
openssl pkey -in foo.pem -out foo.key
Eine andere Methode zum Extrahieren des Schlüssels ...
openssl rsa -in foo.pem -out foo.key
openssl crl2pkcs7 -nocrl -certfile foo.pem | openssl pkcs7 -print_certs -out foo.cert
openssl x509 -in foo.pem -outform DER -out first-cert.der
0. Voraussetzung : openssl
sollte installiert sein. Wenn dies unter Windows Git Bash
installiert ist, versuchen Sie es! Alternative Binärdateien finden Sie hier.
1. Auszug .key
aus .pem
:
openssl pkey -in cert.pem -out cert.key
2. Auszug .crt
aus .pem
:
openssl crl2pkcs7 -nocrl -certfile cert.pem | openssl pkcs7 -print_certs -out cert.crt
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