HttpClient не использует сертификат клиента для взаимной аутентификации TLS - PullRequest
0 голосов
/ 11 декабря 2018

Вопрос

Почему мой экземпляр HttpClient не использует предоставленный мне сертификат клиента для взаимной аутентификации?

Фон

Я использую HttpClient для создания взаимной TLS.Как клиент, я добавляю сертификат клиента в WebRequestHandler, а затем использую этот обработчик в новом HttpClient.

Сертификат не установлен на моем компьютере. Я успешно загрузилэто в обработчик и может видеть его при отладке (пароль тоже правильный).

Я тестирую на нескольких разных тестовых доменах

  • https://client.badssl.com/ - здесь выполняется проверка подлинности клиента с использованием найденного сертификата здесь .Это сертификат, которым я сейчас пользуюсь
  • https://prod.idrix.eu/secure/ - этот сертификат просто выплевывает любой представленный сертификат клиента.

Оба приложения тестирования показывают, что сертификат не отправляется.

Код

    var clientCert = new X509Certificate2("badssl.pem", "badssl.com");

    var webHandler = new WebRequestHandler();
    webHandler.ClientCertificates.Add(clientCert);
    var httpClient = new HttpClient(webHandler);

    var result = await (await httpClient.GetAsync(uri)).Content.ReadAsStringAsync();

1 Ответ

0 голосов
/ 11 декабря 2018

Класс X509Certificate2 не похоже на чтение в закрытом ключе из сертификата PEM.

    var clientCert = new X509Certificate2("badssl.com-client.pem", "badssl.com");
    if(!clientCert.HasPrivateKey)
        throw new ApplicationException("Cert doesn't contain private key");

Выдает ошибку.

В случае badssl.com,у них есть сертификат PKCS # 12 (он же PFX).Я смог заставить ваш код работать с этим сертификатом.

...