C# 使用HTTPS/TLS的web请求导致超时

C# 使用HTTPS/TLS的web请求导致超时,c#,ssl,.net-4.0,C#,Ssl,.net 4.0,我正在向第三方web服务发送一个基本请求,但在安装了.net v4.0的计算机上,它总是超时。(超时异常:“操作已超时”) 如果安装了4.5,它可以正常工作,但我们需要支持4.0 服务主机已禁用对SSL3协议的支持,因此以下操作对我无效 ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; 发送请求的代码是基本的 var request = ((HttpWebRequest)WebRequest.Create("ht

我正在向第三方web服务发送一个基本请求,但在安装了.net v4.0的计算机上,它总是超时。(超时异常:“操作已超时”)

如果安装了4.5,它可以正常工作,但我们需要支持4.0

服务主机已禁用对SSL3协议的支持,因此以下操作对我无效

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
发送请求的代码是基本的

var request = ((HttpWebRequest)WebRequest.Create("https://hostname.com"));             
var response = (HttpWebResponse)request.GetResponse(); //timeout here
这也无济于事,因为它从未达到这一点

ServicePointManager.ServerCertificateValidationCallback = (sender,certificate,chain,sslPolicyErrors)=> true;
如果我只是使用web浏览器导航到第三方web服务,它就可以正常工作

在这种情况下,扩展超时值显然不起作用,因为第三方服务器从未实际返回响应

如何解决此问题

更新: 问题发生在win7和win server 2003计算机上。 另一个测试是在带有.NETv4.0的XP机器上进行的。测试通过并收到响应。 因此,NETv4.0可能不是这里的问题。(但升级到4.5之前确实解决了这个问题。)


这个问题必须是环境问题。如何解决此问题?

您可能可以使用,通过该属性,它有两个参数来设置超时等待时间。

Dotwillbert的答案

Windows 7上的.NET framework实现了TLS扩展:服务器名称指示(RFC4366)。根据你的帖子,这个TLS是什么 警报表示服务器以“无法识别的名称”响应。不确定 为什么报告连接超时,因为它确实没有超时。 您的网络跟踪应该显示客户端启动了连接 在此[FIN,ACK]之后终止。降级到SSL3可避免 SNI的召唤

仅供参考:Windows XP上的相同.NET framework不使用TLS服务器 名称指示扩展名。您的程序将在那里工作

在我的例子中,我追踪到了一个丢失的服务器名 Apache中的指令。将服务器名添加到SSL配置中 解决了这个问题,因为现在web服务器不再不知道它的 名字


第三方更新了SSL配置以包含服务器名,问题已得到解决。

第三方服务器从未实际响应,因此在这种情况下扩展超时值将不起作用。将更新问题以使其更清楚。