使用HTTPS / TLS的Web请求会导致超时

时间:2014-08-14 05:55:55

标签: c# ssl .net-4.0

我正在向第三方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;

如果我只是使用网络浏览器导航到第三方网络服务,则可以正常使用。

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

我该怎么做才能解决这个问题?

更新 问题发生在win7和win server 2003机器上。 另一项测试是在带有.NETv4.0的XP机器上完成的。测试通过并收到回复。 所以.NETv4.0可能不是这里的问题。 (但升级到4.5确实解决了以前的问题。)

问题必须是环保的。我该怎么做才能解决这个问题?

2 个答案:

答案 0 :(得分:1)

dotwilbert的回答发现here

  

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

     

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

     

在我的情况下,我将此事件的跟踪记录为缺少的ServerName   Apache中的指令。将ServerName添加到SSL配置   解决了它,因为现在网络服务器不再不知道它   名。

第三方更新了SSL配置以包含ServerName,问题已解决。

答案 1 :(得分:0)

您可以使用HttpWebRequest.Timeout,并且使用该属性,它有两个参数来设置超时等待时间。