Ich schreibe eine UWP-App in C#, die schließlich für IoT bestimmt ist, aber im Moment habe ich nur lokal debuggen. Ich verwende Windows.Web.Http.HttpClient
, um eine Verbindung zu einem selbst gehosteten WCF-REST-Webdienst herzustellen, den ich auch geschrieben habe und der zum Testen als Konsolenanwendung auf demselben Computer ausgeführt wird. Der Dienst erfordert eine gegenseitige Authentifizierung mit Zertifikaten, also habe ich ein CA-Zertifikat, ein Service-Zertifikat und ein Client-Zertifikat.UWP App HttpClient HTTPS-Client-Zertifikat Probleme
Mein UWP Code funktioniert wie folgt:
- prüfen App cert Speicher für Client-Zertifikat und CA-Zertifikat installiert.
- Wenn nicht, installieren Sie von PFX-Datei bzw. CER-Datei.
- Bringen Sie die
Certificate
zumHttpBaseProtocolFilter
und den Filter auf die dieHttpClient.PostAsync
Nachdem ich PostAsync
HttpClient
An Error Occurred in the Secure Channel Support
. Nach vielen Online-Suchen und mit gesundem Menschenverstand bin ich mir ziemlich sicher, dass HttpClient
wegen eines Problems, das die gegenseitig authentifizierte SSL-Verbindung herstellt, barfing ist. Aber aufgrund meiner Fehlersuche kann ich nicht nachvollziehen, warum. Um Troubleshoot weiter, habe ich eine einfache alte Konsole app mit System.Net.Http.HttpClient
geschrieben, fügte das Client-Zertifikat an die Anfrage und alles funktioniert super. Leider wird System.Net
nicht vollständig von UWP unterstützt. Ich habe auch versucht, das Zertifikat nicht an die UWP HttpClient
anzuhängen und die App fordert mich mit einer UI auf, ein installiertes Zertifikat auszuwählen. Ich wähle das korrekte Zertifikat aus und bekomme immer noch die selbe Ausnahme (dadurch weiß ich zumindest, dass das Zertifikat korrekt installiert wurde und mit der Zertifizierungsstelle aus Sicht der App korrekt validiert wird). Außerdem habe ich den GET im Web-Service von einem Browser aus getroffen, das Client-Zertifikat bei Aufforderung ausgewählt und kann eine Datei herunterladen.
Ich habe versucht mit Fiddler und, ich nehme an, wegen der Art, wie es Verkehr Verkehr, scheint es ein wenig weiter zu arbeiten, außer mein Web-Service lehnt die Anfrage als Forbidden ab (vermutlich weil Fiddler nicht den richtigen Client enthält) Zertifikat in der Anfrage). Ich habe Wireshark noch nicht gefunden, weil es ein Problem ist, Wireshark mit localhost unter Windows zu arbeiten.
Mein nächster Schritt besteht darin, den Webdienst zu ändern, um keine Clientauthentifizierung zu erfordern und zu sehen, ob das das Problem ist.
Zwei Fragen: Warum funktioniert Windows.Web.Http.HttClient
in diesem Fall nicht? Und, weniger wichtig, irgendwelche Empfehlungen zu guten HTTP-Überwachungstools, die mir helfen, das weiter zu debuggen?
diese selbst signierte Zertifikate sind? –
Ich habe 'makecert' verwendet, um ein CA-Zertifikat zu erstellen und aus diesem CA-Zertifikat den Client und den Service mit' makecert' ausgegeben. – koopaking3
Möglicherweise relevant: https://code.msdn.microsoft.com/windowsapps/How-to-ignore-Self-Signed-e50b89b6 –