Wie kann das Erstellen eines X509Certificate2 aus einem PKCS # 12-Byte-Array eine CryptographicException auslösen (das System kann die angegebene Datei nicht finden.)?

Wie kann das Erstellen eines X509Certificate2 aus einem PKCS # 12-Byte-Array eine CryptographicException auslösen (das System kann die angegebene Datei nicht finden.)?

Haben Sie PKCS#12 oder nur eine PFX-Datei? In der Microsoft-Welt ist es dasselbe, aber andere denken anders (siehe diese archivierte Seite).

Du kannst es einfach versuchen, indem du folgst

X509Certificate2 cert = X509Certificate2(byte[] rawData, "password");
X509Certificate2 cert2 = X509Certificate2(byte[] rawData, "password",
              X509KeyStorageFlags.MachineKeySet |
              X509KeyStorageFlags.PersistKeySet |
              X509KeyStorageFlags.Exportable);

(X509Zertifikat2(Byte[])) oder

X509Certificate2 cert = X509Certificate2("C:\Path\my.pfx", "password");

(Siehe X509Certificate2(String, String) und Import(String, String, X509KeyStorageFlags) in Microsoft Docs, wenn Sie einige Flags verwenden müssen)

AKTUALISIERT :Es wäre hilfreich, wenn Sie ein Codefragment einfügen und nicht nur den Exception-Stack-Trace.

Welche X509KeyStorageFlags benutzt du? Sie können Process Monitor verwenden, um herauszufinden, welche Datei X509Certificate2 nicht finden konnte Konstrukteur. Es kann beispielsweise sein, dass für den aktuellen Benutzer unter Windows XP, bei dem das Problem auftritt, kein Standardschlüsselcontainer vorhanden ist. Sie können es erstellen und den Import erneut versuchen.


Ich bin auf dasselbe Problem gestoßen.

Laut diesem alten KB-Artikel bestand das Problem darin, dass der Konstruktor versucht, das Zertifikat in das Profil des aktuellen Benutzers zu laden, aber der .Net-Code I imitierte den Benutzer und hatte daher das Benutzerprofil nicht geladen. Der Konstruktor benötigt das geladene Benutzerprofil, um ordnungsgemäß zu funktionieren.

Aus dem Artikel:

Das Laden des Benutzerprofils hat den Fehler behoben.


Ich hatte das gleiche Problem.

  1. Öffnen Sie IIS auf dem Server, der die Site hostet.
  2. Finden Sie den Anwendungspool für die Site.
  3. Klicken Sie auf "Erweiterte Einstellungen".
  4. Ändern Sie "Benutzerprofil laden" auf wahr. (Möglicherweise Neustart oder Neustart erforderlich)

Dadurch kann das Krypto-Subsystem funktionieren.