Frage

Ich versuche, die Httplistener-Klasse in einer C # .NET-Anwendung zu verwenden, ein Mini-Webserver haben Inhalte über SSL dienen. Um dies zu tun, muss ich die httpcfg-Tool verwenden. Ich habe eine PFX-Datei mit meinem öffentlichen und privaten Schlüsselpaar. Wenn ich dieses Schlüsselpaar manuell mit mmc in den lokalen Computerspeicher zu importieren, funktioniert alles einwandfrei. Allerdings, wenn ich dieses Schlüsselpaar programmatisch mit der X509Store Klasse importieren, ich bin nicht in der Lage meiner Mini-Webserver zu verbinden. Beachten Sie, dass das CERT in beiden Verfahren ist zum meinem Speicher in Localmachine importiert zu werden. Merkwürdig ist, dass ich im Stande bin, das Zertifikat in mmc anzuzeigen, sobald ich es programmatisch importieren und wenn ich es sehe, zeigt die Benutzeroberfläche, dass ein privater Schlüssel für dieses Zertifikat ist ebenfalls verfügbar.

ein wenig tiefer Graben, merke ich, dass, wenn ich manuell das Schlüsselpaar importieren, habe ich eine neue Datei erscheint in C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys sehen kann, aber man wird nicht angezeigt, wenn ich programmatisch importieren. Über einen entsprechenden Hinweis, wenn ich ein manuell importiertes Zertifikat löscht, wird es nicht die entsprechende private Schlüsseldatei aus dem zuvor genannten Verzeichnis entfernen.

Letztlich meine Frage ist: Wenn ich das Zertifikat in den Laden programmatisch hinzufügen, wo ist der private Schlüssel gespeichert werden, und warum ist es nicht zugänglich für die Httplistener-Klasse (HTTPAPI)

Beachten Sie, dass diese Frage etwas verwandt ist, aber ich glaube nicht, Permissionierung das Problem ist, da dies alles als der gleiche Windows-Benutzer durchgeführt werden: Wie stellt man von .NET

Berechtigung für die private Schlüsseldatei von X.509-Zertifikat gelesen
War es hilfreich?

Lösung

Ok, ich es herausgefunden. Es hatte mit den wichtigsten Speicherparametern für das Zertifikat Objekt zu tun. Für alle anderen, die in dieses Problem läuft, stellen Sie sicher, dass Sie Ihre X509Certificate2 Objekte konstruieren, die Sie in den Laden Hinzufügen der X509KeyStorageFlags.PersistKeySet und X509KeyStorageFlags.MachineKeySet Flags verwenden. Dies wird mit dem privaten Schlüssel erzwingen in der Maschinenschlüssel festlegen Standort bestehen bleiben, die durch HttpApi erforderlich ist (HttpListener wickelt diese).

Andere Tipps

Ist das ein 2-Wege-SSL? Wenn es dann haben senden Sie über eine SSL-Zertifikat anfordern Datei auf Ihrem Rechner erzeugt? Dieses Zertifikat anfordern Datei verwendet wird, um die SSL zu erstellen und sie bilden zusammen ein öffentlich-privates Schlüsselpaar.

Auch haben Sie versucht, die CERT Berechtigung für das Benutzerkonto zugeordnet wird, verwendet wird, um das Web-App zu laufen? Sie können dies tun, indem Sie das Microsoft WSE 3.0-Tool.

Nicht gerade die Antwort auf Ihre Frage, aber hier als Referenz anderer gehen diesen Weg:

Hier ist ein Link zu einem MS-Chat, die Probe gibt C # -Code zu tun, was httpcfg tut, wodurch die Notwendigkeit für das Werkzeug im Einsatz zu beseitigen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top