如何在特定的HttpWebRequest中使用SSL3而不是TLS?

11
我的应用程序需要通过https与不同的主机通信,而默认设置的 ServicePointManager.SecurityProtocol = TLS 在今天之前一直能够很好地服务于我。现在,我有一些主机(如 System.Net 跟踪日志所示)没有响应初始的TLS握手消息,但保持底层连接开放直到超时,抛出超时异常。我尝试将 HttpWebRequest 的超时时间设置为多达5分钟,但结果相同。可能这些主机正在等待SSL3握手,因为IE和Firefox都能在30-40秒的延迟后连接到这些主机。在 .NET 中似乎存在一些回退机制,将TLS降级为SSL3,但由于某些原因它没有启动。
FWIW,以下是我的请求发送的握手消息(一个常规的TLS 1.0 CLIENT HELLO消息):
00000000 : 16 03 01 00 57 01 00 00-53 03 01 4C 12 39 B4 F9 : ....W...S..L.9..
00000010 : A3 2C 3D EE E1 2A 7A 3E-D2 D6 0D 2E A9 A8 6C 03 : .,=..*z>......l.
00000020 : E7 8F A3 43 0A 73 9C CE-D7 EE CF 00 00 18 00 2F : ...C.s........./
00000030 : 00 35 00 05 00 0A C0 09-C0 0A C0 13 C0 14 00 32 : .5.............2
00000040 : 00 38 00 13 00 04 01 00-00 12 00 0A 00 08 00 06 : .8..............
00000050 : 00 17 00 18 00 19 00 0B-00 02 01 00             : ............    

在特定的HttpWebRequest中是否有一种使用SSL3而不是TLS的方法,或者强制回退?似乎ServicePointManager的设置是全局性的,我真的不想将安全协议设置降级到整个应用程序的SSL3。


你真的通过将连接设置更改为SSL3来测试你的假设了吗? - Amnon
是的,假设证明是正确的。主机是Netware,而且似乎这是Netware关于未识别/无效请求的政策,不予响应或提供任何错误消息,大概是为了减少攻击面。 - Anton Tykhyy
2个回答

14

实际上,ServicePointManager的设置是针对每个应用程序域的。这使得我可以通过创建一个单独的应用程序域来解决问题,该域被设置为仅使用SSL3,使我的数据收集对象成为MarshalByRefObjectWebClientWebRequest都是按引用传递的,但最好减少跨应用程序域调用的数量),然后在那里创建它。与基于超时的检测方案完美结合使用。


你在哪里写这段代码的?System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls - Anish V
@AnishV 或者相关人员:ServicePointManager 对象来自 System.Net 命名空间,它维护着一种类似静态的状态。因此,在执行相关操作之前,只需“using”该命名空间并执行 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11; 一次 即可解决问题。 - kmonsoor

4
.NET包含自动降级协议版本的功能。 ServicePointManager.SecurityProtocol 的值决定其行为,它可以有三个不同的取值:SecurityProtocol.Ssl3, SecurityProtocol.Tls或SecurityProtocol.Ssl3 | SecurityProtocol.Tls。虽然是全局的,但可以根据需要更改。
我无法在没有访问具有相同错误行为的服务器的情况下确定解决方案。我唯一能提出的建议是尝试使用Ssl3 | Tls设置进行连接,如果失败,则重试使用Ssl3设置。尝试降低超时时间并捕获超时异常,然后重试。
编辑:
我之前的回答中写错了很多东西。

8
在一个高度多线程的应用程序中,更改全局设置不是一个好主意,ServicePointManager.SecurityProtocol需要在请求期间保持不变,因此我采用了另一种方式。 - Anton Tykhyy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接