2016-11-26 6 views
0

Ich studiere OpenSSL mit der RSA-Schlüsselgenerierung und -manipulation. Zuerst erzeugt ich ein Schlüsselpaar verschlüsselt im PEM-Format, aber unverschlüsselt:Openssl RSA-Schlüssel PEM- und DER-Konvertierung - stimmt nicht überein

openssl genpkey -algorithm RSA -out key.pem -pkeyopt rsa_keygen_bits:2048 

Dann habe ich Format Der umgewandelt:

openssl rsa -inform PEM -outform DER -in key.pem -out key1.cer 

Dann konvertiert ich es zurück zu PEM codiert:

openssl rsa -inform DER -outform PEM -in key1.cer -out key2.pem 

Wenn ich nun die beiden vergleiche, unterscheiden sie sich in ihrem Inhalt (BASE64 kodierte Texte). Die Größe der Dateien ist auch anders ...

Warum ist das? Habe ich hier etwas falsch gemacht?

Alle Schlüssel sind hier angehängt. https://www.dropbox.com/sh/ec1sm3y63sahwks/AAB6At3x_j5LRyf63gJDJn39a?dl=0

Danke, Difan

Antwort

0

Blick auf die PEM-Dateien und Sie werden man sehen, beginnt mit -----BEGIN PRIVATE KEY----- und das andere beginnt mit -----BEGIN RSA PRIVATE KEY-----. Die Wörter in den BEGIN- und END-Zeilen eines PEM-Blocks geben das Format der Daten im Block an und geben zwei von etwa 10 (abhängig von der genauen Zählung) verschiedenen von OpenSSL für RSA-Schlüssel unterstützten Datenformaten an.

Die erste ist die unverschlüsselte Variante PKCS8republished as RFC 5208 im Abschnitt 5. PKCS8 private Schlüssel für viele verschiedene Algorithmen verarbeiten kann, einschließlich RSA DSA DH und ECDSA, mit oder ohne Passwort-basierte Verschlüsselung (PBE) des Schlüssels . openssl genpkey wurde entwickelt, um mehrere Algorithmen zu verarbeiten, und verwendet dazu das PKCS8-Format.

Die zweite ist die RSA-only PrivateKey-Syntax von PKCS1republished as RFC3447 und pred in Abschnitt A.1. Dieses Format wird von den älteren Funktionen openssl rsa und openssl genrsa geschrieben, da sie nur RSA verarbeiten und das traditionelle Format oder Legacy-Format genannt wird, um es von PKCS8 zu unterscheiden. PKCS1 definiert kein verschlüsseltes Format, aber OpenSSL unterstützt ein generisches PEM-Verschlüsselungsschema, das bei Bedarf auf dieses Format angewendet werden kann. Die OpenSSL- "Legacy" -PEM-Verschlüsselung ist jedoch nicht so gut wie die in PKCS8 verwendete. Daher sollten Sie normalerweise PKCS8 verwenden, wenn Sie Sicherheit wünschen, oder PKCS12 stattdessen für einen privaten Schlüssel mit Zertifikaten.

können Sie konvertieren PKCS8 DER und zurück zur PEM pkey verwendet, die wie genpkey mehrere Algorithmen behandelt und verwendet PKCS8:

openssl pkey -in key.pem [-inform PEM] -out key.der -outform DER 
openssl pkey -in key.der -inform DER -out xxx.pem [-outform PEM] 
# now xxx.pem is the same as key.pem 

Da PEM-Dateien (im Gegensatz DER) kann durch die Art in der anerkannt werden BEGIN Zeile können Sie PKCS1 PEM zurück zu PKCS8 direkt konvertieren:

openssl pkey -in key2.pem -out yyy.pem 
# now yyy.pem is the same as key.pem 

Programme die OpenSSL-Bibliothek verwenden, einschließlich, aber nicht beschränkt auf openssl Command , kann eine PEM-Datei mit einem privaten Schlüssel in einem dieser Formate automatisch und eines der beiden verschlüsselten Formate automatisch lesen, wenn das richtige Kennwort angegeben wird.

+0

Danke, mein Herr! Sehr klare Antwort. Ich habe jedoch anscheinend aufgewertet, dass ich neu bin mit einem niedrigen Ruf, also zählt mein Upvote nicht ... Sorry .. Aber diese Antwort sollte einige Upvotes anziehen! –

Verwandte Themen