使用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确实解决了之前的问题。)
必须是环境问题。如何解决此问题?
作者:dotwilbert
Windows 7上的。net框架实现了TLS扩展:服务器名称指示(RFC4366)。根据你的帖子,这是什么TLS警告表示服务器响应"未识别的名称"。不确定为什么连接报告为超时,因为它实际上没有超时。您的网络跟踪应该显示客户机发起了一个连接在此[FIN,ACK]之后终止。降级到SSL3可以避免调用SNI。
供参考:Windows XP上相同的。net框架不使用TLS服务器名称指示扩展。您的程序将在那里工作....
在我的例子中,我跟踪这个事件的发生到一个丢失的服务器名指令。将ServerName添加到SSL配置解决了它,因为现在的web服务器不再是不知道它名字。
第三方更新了SSL配置以包含服务器名,问题已解决。
你可以使用HttpWebRequest。超时,并且有了这个属性,它有两个参数来设置超时等待时间。