我正在开发一个程序(在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;
}
}