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

本文关键字:超时 请求 web HTTPS TLS 使用 | 更新日期: 2023-09-27 18:17:51

我正在向第三方web服务发送一个基本请求,但是在安装了。net v4.0的机器上总是超时。(超时异常:"The operation has timed out")

如果安装了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机器上。另一个测试是在一台使用. net v4.0的XP机器上进行的。测试通过了,并收到了响应。所以。netv4.0可能不是这里的问题。(但升级到4.5确实解决了之前的问题。)

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

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

作者:dotwilbert

Windows 7上的。net框架实现了TLS扩展:服务器名称指示(RFC4366)。根据你的帖子,这是什么TLS警告表示服务器响应"未识别的名称"。不确定为什么连接报告为超时,因为它实际上没有超时。您的网络跟踪应该显示客户机发起了一个连接在此[FIN,ACK]之后终止。降级到SSL3可以避免调用SNI。

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

在我的例子中,我跟踪这个事件的发生到一个丢失的服务器名指令。将ServerName添加到SSL配置解决了它,因为现在的web服务器不再是不知道它名字。

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

你可以使用HttpWebRequest。超时,并且有了这个属性,它有两个参数来设置超时等待时间。