Принудительное использование ASP.NET WebAPI-клиента для отправки сертификата клиента даже при отсутствии совпадения с CA

У меня есть конкретное приложение, которое требует использования клиентских сертификатов для взаимной аутентификации запросов HTTPS. Сервер имеет гибкую политику проверки сертификатов, которая позволяет ему принимать самозаверяющие клиентские сертификаты, которых нет в хранилище сертификатов сервера. Известно, что это прекрасно работает при использовании curl в качестве клиента.

Что я определил с помощью тестирования и перехвата пакетов, так это то, что Microsoft ASP.NETHttpClient пытается быть слишком умным во время рукопожатия SSL. Этот конкретный клиент будет использовать только сертификат клиента (изWebRequestHandler.ClientCertificates сбор), если он имеет цепочку доверия к одному из доверенных корней сервера. Я заметил, что если нет сертификатов с цепочкой доверия, то клиент просто не отправит сертификат вообще во время рукопожатия.

Это понятное поведение по умолчанию, но оно слишком ограничительно, и, похоже, нет способа его отключить. Я экспериментировал с различными другимиWebRequestHandler свойства, в том числеAuthenticationLevel а такжеClientCertificateOptions но безрезультатно.

Есть ли способ заставитьHttpClient отправить сертификат клиента, когда он доступен вClientCertificates сбор, даже если кажется, что он не будет проверять на стороне сервера? Я открыт как для простых, так и для грязных (рефлексов) решений, так как мне действительно нужен этот клиент для работы.

Ответы на вопрос(1)

Ваш ответ на вопрос