Frage

Ich habe einen Webservice, der durch die Forderung, die verzehrende Dritte Anwendung geschützt ist ein Client-Zertifikat zu übergeben. Ich habe das Zertifikat auf der Bereitstellung von Web-Service in der Produktion und auf dem Client ebenfalls installiert. Dieses Verfahren arbeitet derzeit gut für andere Kunden mit einer ähnlichen Einrichtung. Die aktuelle Version ist in .NET 3.5 geschrieben und funktioniert perfekt auf meine Entwicklung Maschine unter cassini (und läuft Standalone), weigert sich aber auf meine Produktionsmaschine mit dem gleichen Code und Zertifikat-Setup zu arbeiten. Ich habe bestätigt, dass der Provider Web-Service das Zertifikat auf dem Client über den Browser installiert akzeptiert, aber wenn die cert programmatisch zu einem Webservice Aufruf hinzugefügt wird, bekomme ich ein 403, wird der Zugriff verweigert. I-Ausgang der Fingerabdruck des Zertifikats zu dem Anruf, bevor er die Anforderung an den geschützten Webservice macht, und es ist in der Tat das richtige Zertifikat beigefügt. Mein Denken ist, dass irgendwo entlang der Linie, es keinen Zugriff auf den privaten Schlüsselteil des Zertifikats hat.

Irgendwelche Ideen?

Hinweis: Ich habe den IIS-Prozess Zugriff auf die relevanten ~ / Krypto-Verzeichnisse angegeben

.

Dies ist C # und .NET 3.5

War es hilfreich?

Lösung

Ich hatte diese Art von Problem vor ein paar Wochen. Die Lösung in meinem Fall war Identitätswechsel zu verwenden, um einen angemessenen Zugang zu den Zertifikatspeicher zu gewinnen. Standardmäßig lief die IIS-Worker-Thread als Systembenutzer, und als solche hatte keinen Zugriff auf den entsprechenden Speicher. Hinzufügen um das Zertifikat zu einem bestimmten Benutzer zu speichern und Identitätswechsel, dass der Benutzer alle Probleme gelöst.

Ich werde diese Frage auch weiterhin beobachten, obwohl, wie ich weiß, dass Identitätswechsel ist kein magische Kugel fix, und dass es Probleme daraus in diesem Szenario ergeben sein.

Andere Tipps

Es gibt einen deutlichen Grund, es nicht auf meiner Maschine nicht funktioniert. Wenn innerhalb von Visual Studio ausgeführt wird, läuft es mit meinen Anmeldeinformationen, die das Zertifikat installieren verwendet wurden. So automatisch die Erlaubnis hat, die privaten Schlüsselspeicher auf dem Computer zugreifen. Jedoch , wenn sie außerhalb von Cassini (in der IDE) ausgeführt wird, hat der IIS-Prozess hat nicht Berechtigungen , um Zugriff auf den privaten Schlüssel zu speichern.

Temporäre Lösung: Führen Sie die App-Domain als Lokales System . Bad für die Sicherheit, aber es wird die Anwendung und läuft (wenn auch bandgestützter), bis ich eine dauerhaftere Lösung arbeiten kann.

Sie können nur diese Aufkleber Klaps auf Ihrem Programm und nennen es einen Tag:

alt text

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