Wie man den privaten Schlüssel aus der PKCS#12 (.p12) Datei mit C#
Im Versuch der Anmeldung einige Daten, die Verwendung von PKCS#12-Zertifikat ,aber ich habe ein problem mit der Beschaffung privaten Schlüssel von PKCS#12 (.p12-Datei).
public byte[] sign(string text)
{
string password = "1111";
X509Certificate2 cert = new X509Certificate2("c:\\certificate.p12",password);
byte[] certData = cert.Export(X509ContentType.Pfx,password);
X509Certificate2 newCert = new X509Certificate2(certData, password);
RSACryptoServiceProvider crypt = (RSACryptoServiceProvider)newCert.PrivateKey;
SHA1Managed sha1 = new SHA1Managed();
UnicodeEncoding encoding = new UnicodeEncoding();
byte[] data = encoding.GetBytes(text);
byte[] hash = sha1.ComputeHash(data);
return crypt.SignHash(hash, CryptoConfig.MapNameToOID("SHA1"));
}
Das problem ist, dass newCert.PrivateKey ist null, aber wenn ich mich mit .pfx certicitae in ähnlicher Weise, wie es funktioniert.
public byte[] sign(string text)
{
string password = "1234";
X509Certificate2 cert = new X509Certificate2("c:\\certificate.pfx", password);
RSACryptoServiceProvider crypt = (RSACryptoServiceProvider)cert.PrivateKey;
SHA1Managed sha1 = new SHA1Managed();
UnicodeEncoding encoding = new UnicodeEncoding();
byte[] data = encoding.GetBytes(text);
byte[] hash = sha1.ComputeHash(data);
return crypt.SignHash(hash, CryptoConfig.MapNameToOID("SHA1"));
}
Also die Frage ist wie kommt man den privaten Schlüssel aus .p12-Datei ?
- Haben Sie versucht, den gleichen code für beide .PFX und .P12? Je nachdem, wo du dein P12 aus, es soll ganz so sein, glaube ich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte ein ähnliches problem, welches ich gepostet hier, obwohl es nicht die gleiche Sache für Sie, kann das problem auch Berechtigungen.
Meine Vorschläge sind, Erstens, Sie haben, um sicherzustellen, (die ich nehme an, Sie bereits haben), dass der private Schlüssel exportierbar und Sie haben Berechtigungen auf die Datei.
Versuchen Sie als Nächstes, den Export des content type als
X509ContentType.Pkcs12
stattX509ContentType.Pfx
Schließlich, wenn es möglich ist, warum nicht Sie versuchen, Sie zu importieren, um die certstore. Ich glaube, dass ist sicherer. Die Schritte sind in dem oben genannten link.
X509ContentType.Pkcs12
aber mit dem gleichen Ergebnis. Obwohl der Import dieser zu certstore könnte ein sollution.Haben Sie einen Blick auf diese Frage. Es sieht sehr ähnlich aus.
In der docs, es sagt, dass
.export()
unterstützt nicht diePfx
geben, nurCert
,SerializedCert
, undPkcs12
.Dies wurde für Android - so die von R. raw.Schlüssel unten war meine Datei in der Android-Raw-Ordner.
Öffnete ich den Schlüssel.p12 als input-stream. Die ich dann Umgerechnet auf den privaten Schlüssel mithilfe der Bibliotheken wie im Beispiel.
http://www.flexiprovider.de/examples/ExampleSMIMEsign.html
Mein code sieht wie folgt aus