Privater Schlüssel des Zertifikats im Zertifikatsspeicher nicht lesbar

8

Ich denke, ich habe das gleiche Problem wie dieser Typ , aber ich hatte nicht so viel Glück wie er / sie, da die gelieferte Lösung bei mir nicht funktioniert.

Die bereitgestellte Lösung sucht nach Dateien in C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys ( nicht in Unterverzeichnissen) und C:\Users\[Username]\AppData\Roaming\Microsoft\Crypto\RSA (und Unterverzeichnissen) Da das Setup die Anwendung jedoch für alle Benutzer installieren soll, wird die benutzerdefinierte Aktion unter SYSTEM -User ausgeführt, wodurch die tatsächlich erstellten Dateien in C:\ProgramData\Application Data\Microsoft\Crypto\RSA\S-1-5-18 ausgeführt werden.

Wenn Sie eine "normale" Anwendung als Admin ausführen (Rechtsklick - & gt; Als Admin ausführen), die genau den gleichen Code ausführt, wird eine Datei unter C:\Users\[Username]\AppData\Roaming\Microsoft\Crypto\RSA\S-1-5-21-1154405193-2177794320-4133247715-1000 erstellt.

Das mit der benutzerdefinierten WIX-Aktion generierte Zertifikat scheint keinen privaten Schlüssel zu haben (" Der Schlüsselsatz existiert nicht "), während das von der "normalen" Anwendung generierte Zertifikat dies tut.

Wenn man sich die Berechtigungen der Dateien anschaut, scheinen sie in Ordnung zu sein, auch wenn sie sich unterscheiden (der funktionierende enthält den SYSTEM -Benutzer), selbst nach dem Hinzufügen von SYSTEM one zum ("non-working" ") Datei Ich kann den privaten Schlüssel nicht lesen, der gleiche Fehler hier.

Dann habe ich die FindPrivateKey verwendet, um die entsprechende Datei zu finden, aber alles, was ich bekomme, ist "Unable to obtain private key file name" .

Ok, was geht hier hin? Wo speichert Windows die privaten Schlüssel für Zertifikate, die vom Benutzer SYSTEM gespeichert wurden? Vielleicht ist keine private Schlüsseldatei erstellt? Warum?

    
GameScripting 05.11.2012, 12:11
quelle

1 Antwort

10

Ich habe eine Lösung gefunden, indem ich fast alles googelte ... so wie ich es verstehe, gibt es einige Dinge zu tun:

  1. Erzeuge ein X509Certificate2
  2. Stellen Sie sicher, dass der Container für den privaten Schlüssel persistent (nicht temporär) ist
  3. Achten Sie darauf, Zugriffsregeln für authentifizierte Benutzer zu haben , damit sie den privaten Schlüssel sehen können

Also ist der letzte Code a der folgende:

%Vor%     
GameScripting 08.11.2012, 12:23
quelle