Я пишу приложение UWP на C#, которое в конечном итоге предназначено для IoT, но сейчас я только отлаживаю локально. Я использую Windows.Web.Http.HttpClient
для подключения к самообслуживаемому веб-сервису WCF REST, который я также написал и работает как консольное приложение на той же машине для тестирования. Служба требует взаимной аутентификации с сертификатами, поэтому у меня есть сертификат CA, сертификат службы и клиентский сертификат.UWP-приложение HttpClient HTTPS-клиентские проблемы с сертификатом
Мой UWP код работает так:
- Проверьте магазин приложений сертификат для клиента CERT и CA серт установлен.
- Если нет, установите из файла PFX и файла CER, соответственно.
- Прикрепите
Certificate
кHttpBaseProtocolFilter
и добавить фильтр кHttpClient
- Вызвать
HttpClient.PostAsync
После того как я называю PostAsync
я получаю следующее сообщение об ошибке: An Error Occurred in the Secure Channel Support
. После многократного поиска в Интернете и по здравому смыслу, я уверен, что HttpClient
является барфинг из-за проблемы с установлением взаимно аутентифицированного SSL-соединения. Но на основании моего устранения неполадок я не могу понять, почему.
Чтобы решить проблему, я написал обычное старое приложение консоли с помощью System.Net.Http.HttpClient
, приложил сертификат клиента к запросу и все отлично работает. К сожалению, System.Net
не полностью поддерживается в UWP. Я также попробовал НЕ прикреплять сертификат к UWP HttpClient
, и приложение запрашивает у меня пользовательский интерфейс для выбора установленного сертификата. Я выбираю правильный сертификат и все равно получаю такое же исключение (это, по крайней мере, позволяет мне знать, что сертификат установлен правильно и корректно проверяется с помощью CA с точки зрения приложения). В дополнение, я ударил GET на веб-службе из браузера, выберем сертификат клиента при появлении запроса и могу загрузить файл.
Я попытался использовать Fiddler, и, полагаю, из-за того, как он проксирует трафик, он, похоже, работает немного дальше, за исключением того, что мой веб-сервис отклоняет запрос как Запретный (предположительно потому, что Fiddler не включает правильный клиент сертификат в запросе). Я еще не попал в Wireshark, потому что это боль, чтобы заставить Wireshark работать с использованием localhost в Windows.
Следующий шаг - начать изменение веб-службы, чтобы не требовать аутентификации клиента и посмотреть, не является ли эта проблема.
Два вопроса: Почему Windows.Web.Http.HttClient
не работает в этом случае? И, что менее важно, какие-либо рекомендации относительно хороших инструментов мониторинга HTTP, чтобы помочь мне отладить это дальше?
эти самоподписывающиеся сертификаты? –
Я использовал 'makecert' для создания сертификата CA, и из этого сертификата CA выдан сертификат клиента и сервиса с помощью' makecert'. – koopaking3
Возможно уместно: https://code.msdn.microsoft.com/windowsapps/How-to-ignore-Self-Signed-e50b89b6 –