C#HttpClient在使用TLS1.2时不发送客户端证书

时间:2018-04-11 11:18:58

标签: c# certificate httpclient x509certificate 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;
    }
}

0 个答案:

没有答案