Ich erzeuge ein EC-Schlüsselpaar in C# BouncyCastle und versuche, den privaten Schlüssel in einer PEM-Datei mit dem PemWriter zu exportieren. Der Code für Dabei wird wie folgt:C# BouncyCastle EC Privater Schlüssel Export mit PemWriter
var ecKeyPairGenerator = new ECKeyPairGenerator();
CKeyGenerationParameters ecKeyGenParams = new ECKeyGenerationParameters(SecObjectIdentifiers.SecP384r1, new SecureRandom());
ecKeyPairGenerator.Init(ecKeyGenParams);
AsymmetricCipherKeyPair pair = ecKeyPairGenerator.GenerateKeyPair();
string path = @"c:\tmp\test\myprivkey.pem";
TextWriter textWriter = new StreamWriter(path);
PemWriter pemWriter = new PemWriter(textWriter);
// passing pair results in the private key being written out
pemWriter.WriteObject(pair);
pemWriter.Writer.Flush();
pemWriter.Writer.Close();
Ein Beispiel Ausgabe aus dem Snippet oben ist:
-----BEGIN EC PRIVATE KEY-----
MD4CAQEEMJvNXtTUd7A/fY/9/LSXM+Xb/6QS7GydeART/OieN3zh23Uuy0tgiS1D
rohXMgiPvqAHBgUrgQQAIg==
-----END EC PRIVATE KEY-----
Wenn jedoch das gleiche tun ‚openssl‘ und die gleiche EC-Kurve (secp384r1 mit), ist die resultierende PEM-Datei ganz anders, zB ,:
openssl ecparam -name secp384r1 -genkey -out mykey2.pem -noout
-----BEGIN EC PRIVATE KEY-----
MIGkAgEBBDBqCE9+AWL56cvR2/tRNdyaTIlJnfr6TbhCG+Q48w6yyKR+hE0jkeOV
7yh1t8NwqT6gBwYFK4EEACKhZANiAAS2uLv7KG6RRBZBOecaxBz8FsMobnxgZkbQ
8cKdL1DRym1lUDwgfX8AxOC6qkuD1k0UekpHcwiy1mSghy4640qBAKcR3mVghMVF
77Nm8x6nwNijWZroeqhjrw268PPPuAw=
-----END EC PRIVATE KEY-----
Wie Sie, die Schlüssellänge zu sehen ist sehr unterschiedlich, und die P12-Datei ich mit dem ehemaligen erstelle nicht in den Windows-cert importiert werden st Erze. Ich muss etwas falsch mit C# BouncyCastle tun, kann aber nicht sehen, was (der Quellcode des PemWriter und andere verwandte Klassen zu sehen, zeigt keine offensichtlichen Fehler).
Jede Hilfe würde sehr geschätzt werden. Danke.
Wenn die BC-generierten privaten Schlüssel der Prüfung PEM-Datei mit openssl, openssl meldet korrekt "Private-Key", "ASN1 OID" und "NIST CURVE" Felder, die letzteren beiden haben die gleichen Werte wie die der PEM-Datei von openssl generiert. CertUtil kann jedoch die P12-Datei, die mit dem BC-generierten privaten Schlüssel PEM erstellt wurde, nicht "ablegen", während dies erfolgreich mit dem P12 geschieht, der mit dem von openssl generierten privaten Schlüssel PEM erstellt wurde. – hyongsop
Sie verwenden wahrscheinlich Kodierungen verschiedener asn.1 Typen. Versuchen Sie, 'openssl asn1parse -i -dump -i key.pem' auf beiden Tasten auszuführen, um dies zu überprüfen. – mat
@mat Ja, das habe ich gerade gemacht. Es scheint, als ob die BC PEM-Datei den eigentlichen Schlüssel fehlt ?? Die ans1parse-Ausgabe der openssl-PEM-Datei hat eine zusätzliche Struktur, die in der BC-PEM-Datei fehlt. Diese Struktur sieht so aus: ** ... 65: d = 1 hl = 2 l = 100 Nachteile: cont [1] 67: d = 2 hl = 2 l = 98 prim: BIT STRING ... * * Diese Struktur befindet sich am Ende der openssl-PEM-Datei, und der Rest der Datei, die zu dieser Struktur führt, ist identisch mit denen in der BC-Datei. Wie finde ich die Asn.1-Typen der PEM-Dateien? – hyongsop