Ich versuche, eine selbstsignierte RSA-2048-SHA-256-Zertifikat-PFX-Datei zu erstellen, um es für die Datensignierung in meinen WCF-Anfragen zu verwenden.Erzeuge selbstsignierte RSA-2048-SHA-256-Zertifikat-PFX-Datei mit openSSL
Ich habe einige openSSL-Beispiele verwendet, um eine Zertifikat-PFX-Datei zu erstellen, aber obwohl ich den SHA-Algorithmus auf 256 setze, sehe ich, dass der private Schlüssel dieses Zertifikats diese Einstellungen hat :
KeyExchangeAlgorithm = RSA-PKCS1-KeyEx
SignatureAlgorithm = http://www.w3.org/2000/09/xmldsig#rsa-sha1
und wenn ich den Code unten verwenden, um dieses Zertifikat zu konsumieren, I „Invalid Algorithmus angegeben Ausnahme“ bin immer, aber wenn ich die SHA256CryptoServiceProvider ändern fein alles funktioniert SHA1CryptoServiceProvider.
string msg = "This is my test message";
X509Certificate2 privateCert = new X509Certificate2("C:\\TEMP\\private.pfx", "12345");
byte[] signature = (privateCert.PrivateKey as RSACryptoServiceProvider).SignData(new UTF8Encoding().GetBytes(msg), new SHA256CryptoServiceProvider());
Ich kann nur annehmen, dass meine Zertifikatsdatei nicht mit SHA256 erstellt wurde, sondern mit irgendeiner Art von Standard-SHA1-Algorithmus.
Das sind die Schritte, die ich verwendet, um mein Zertifikat zu erstellen:
openssl req -x509 -days 365 -newkey rsa:2048 -sha256 -keyout key.pem -out cert.pem
openssl pkcs12 -export -in cert.pem -inkey key.pem -out private.pfx
Was mache ich falsch?
Was, warum Sie nicht schaffen können neue SHA-256-basierte Signaturen mit dem Schlüssel, fügen Sie entweder '-CSP„Microsoft Verbesserte RSA und AES Cryptographic Provider“' zum pkcs12 Befehl oder den privaten Schlüssel erhalten von 'cert.GetRSAPrivateKey()'. Aber das ist wirklich eine andere Frage. – bartonjs
Vielen Dank für Ihren Kommentar, ich verwendet -CSP "Microsoft Enhanced RSA und AES Cryptographic Provider" in meinem pkcs12 Befehl, und jetzt funktioniert es, ich habe es tatsächlich versucht Nähern Sie sich vorher, aber aus irgendeinem Grund ist der Befehl pkcs12 fehlgeschlagen. Ich habe auch versucht, cert.GetRSAPrivateKey() zu verwenden, und das funktionierte auch, obwohl es .NET Framework 4.6 erfordert. – Alex