Import eines Zertifikats mit dem privaten Schlüssel programmgesteuert
Ich versuche, die HttpListener-Klasse in eine C# - Anwendung, um eine mini-webserver dienen, der Inhalte über SSL. Um dies zu tun, ich brauche zu verwenden, in der httpcfg-tool. Ich habe eine .pfx-Datei mit meinem öffentlichen und einen privaten Schlüssel. Wenn ich importieren Sie dieses Schlüsselpaar manuell mit der mmc in den Speicher des lokalen Computers funktioniert alles einwandfrei. Allerdings, wenn ich diesen Schlüssel importieren-pair-Mädchen programmgesteuert mithilfe der X509Store Klasse, ich bin nicht in der Lage, eine Verbindung zu meinem mini-webserver. Beachten Sie, dass bei beiden Methoden das cert wird immer importiert MEINEM Speicher in "LocalMachine". Seltsam, ich bin in der Lage, zeigen Sie das Zertifikat in mmc sobald ich programmgesteuert importieren und wenn ich Ansicht es, die Benutzeroberfläche zeigt an, dass ein private key ist auch verfügbar für dieses Zertifikat.
Graben ein wenig tiefer, ich merke, dass wenn ich manuell den Schlüssel importieren-pair-Mädchen, ich kann sehen, eine neue Datei erscheint in C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys
, aber man wird nicht angezeigt, wenn ich importieren programmgesteuert. Auf ein zugehöriger Hinweis, wenn ich löschen Sie ein Zertifikat manuell importiert werden, ist es nicht entfernen Sie die entsprechenden privaten Schlüssel-Datei aus dem zuvor genannten Verzeichnis.
Letztlich, meine Frage ist: Wenn ich programmgesteuert hinzufügen des Zertifikats zum Speicher, wo der private Schlüssel gespeichert wird und warum ist es nicht zugänglich, um die HttpListener-Klasse (HttpApi)?
Beachten Sie, dass diese Frage ist etwas verwandt, aber ich glaube nicht, dass permissioning ist das problem, da dies alle getan, als der Windows-Benutzer:
, Wie lese-Berechtigung auf die Datei mit dem privaten Schlüssel von X. 509-Zertifikat aus .NET
InformationsquelleAutor Jason | 2009-05-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, ich fand es heraus. Es hatte zu tun mit der Schlüssel-Speicher-Parameter für das certificate-Objekt. Für jemand anderes, das läuft in dieses problem, stellen Sie sicher, konstruieren Sie Ihre
X509Certificate2
Objekte, die Sie hinzufügen, um den Speicher mit derX509KeyStorageFlags.PersistKeySet
undX509KeyStorageFlags.MachineKeySet
flags. Dies zwingt den privaten Schlüssel weiterhin in der Maschine-key-set Lage, die erforderlich ist, umHttpApi
(HttpListener
wraps).Leider muss ich noch warten Sie 48 Stunden, bevor ich tun kann, also an welcher Stelle ich wahrscheinlich vergessen, es zu tun. 🙁
Die ich vergeudet habe über 30 Minuten versucht zu verstehen, warum "X509KeyStorageFlags.MachineKeySet & X509KeyStorageFlags.PersistKeySet" nicht funktioniert. Natürlich sollte es "X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet." Ziemlich offensichtlich, nur für den Fall jemand anderes versucht, das gleiche dumme Sache, die ich Tat.
jedes gute Beispiel-code ?
Es ist eine kleine Menge von Beispiel-code: support.microsoft.com/kb/950090
InformationsquelleAutor Jason
Ist das ein 2-Wege-SSL? Wenn es dann haben Sie senden Sie über eine SSL-Zertifikat-Request-Datei auf Ihrem Computer generiert? Dieses Zertifikat Request-Datei zu erstellen, die SSL-und Sie bilden zusammen ein public-private-key-paar.
Außerdem haben Sie versucht, die Zuordnung der cert-Berechtigung für das Benutzerkonto, das verwendet wird, um das web-app? Sie können dies tun, indem Sie mit Microsoft WSE 3.0 tool.
Dass gelesen haben sollte "gibt es keine cert-request beteiligt".
InformationsquelleAutor Developer
Nicht genau die Antwort auf deine Frage, aber hier zur Referenz für andere werden auf diesem Weg:
Hier ist ein link zu einer MS-chat, dass gibt-Beispiel C# - code zu tun, was Sie httpcfg hat, wodurch die Notwendigkeit für das Werkzeug-Bereitstellung.
InformationsquelleAutor Andrew Burns