C# httpclient не отправляет сертификат клиента при использовании tls1.2

Я разрабатываю программу (на C# .Net v4.5.1), которая должна взаимодействовать со сторонней службой, для аутентификации которой требуется сертификат клиента. Проблема в том, что если я включаю TLS1.2 для программы, сертификат клиента не отправляется службе, но если я использую TLS1.0, сертификат передается службе. Я использую одну и ту же функцию и один и тот же сертификат независимо от того, какую версию TLS я использую. Единственное, что я изменил, это версию TLS. Я проверил сетевой трафик с помощью WireShark, и сертификат передается только при использовании TLS1.0. Нужно ли мне делать что-то особенное при использовании TLS1.2 для отправки сертификата вместе с запросом?

Я переключаюсь между TLS1.2 и TLS1.0, используя следующий код

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

а также

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

Я использую следующую функцию для вызова сторонней службы

private static string GetData(string url, X509Certificate certificate, int timeOut = 5)
{
    var handler = new WebRequestHandler();
    handler.ClientCertificates.Add(certificate);

    using (var client = new HttpClient(handler))
    {
        client.Timeout = new TimeSpan(0, 0, timeOut * 1000);

        var result = client.GetAsync(url).Result;
        string content =  result.Content.ReadAsStringAsync().Result;

        return content;
    }
}

Я нашел этот вопрос: stackoverflow.com/questions/47904777/…, возможно, это применимо и к вашему случаю.

Dirk 11.04.2018 13:24

К сожалению, это не относится к моему случаю, поскольку сертификат, который я использую, имеет подпись sha256.

Tuvix 11.04.2018 13:34

У меня такая же проблема. Удачи с решением здесь?

grinder22 15.01.2020 01:01
2
3
1 065
0

Другие вопросы по теме