【问题标题】:Migrating from SSLv3 to TLSv1从 SSLv3 迁移到 TLSv1
【发布时间】:2014-12-02 19:37:16
【问题描述】:

关于 POODLE,现在在服务器上禁用 SSLv3。
客户端软件是在 .NET 2.0 中开发的,并提供 TLSv1 作为唯一的替代方案。我有权更改客户端应用程序和服务器配置。

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls; 用于强制所有 HttpWebRequest.GetResponse() 调用使用 TLSv1。

并且SslStream.AuthenicateAsClient() 与参数SslProtocols.Tls 一起使用以强制在安全证书检索期间使用TLSv1。

最初的问题 (described here) 与收到关于Unrecognized nameTLS Alert 有关。

Wireshark 在握手期间显示以下内容 (AuthenicateAsClient):

TLSv1   182 Client Hello
TLSv1   742 Alert (Level: Warning, Description: Unrecognized Name), Server Hello, Certificate, Server Hello Done

客户端在此调用中抛出以下异常:

AuthenticateAsClient: System.IO.IOException: Unable to read data from the transport connection
---> System.Net.Sockets.SocketException: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond

To correct this issue,apache conf 文件已修改为包含正确的ServerName 值。


现在我不再收到Unrecognized name 警告,但我发现另一个问题:

Wireshark 在握手期间显示以下内容 (AuthenicateAsClient):

SSL 182 Client Hello
TCP 60  443→57062 [RST, ACK] Seq=1 Ack=129 Win=0 Len=0 <--- SHOWN IN RED

客户端在这次调用中抛出一个不同的异常:

System.IO.IOException: Unable to read data from the transport connection
---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host

有趣的是,Wireshark 在Client Hello 的“协议”列中显示SSL——我怀疑这可能与forcibly closed 异常有关——但是,扩展了@987654339显示的框架下方的@ 部分,显示使用了 TLSv1 ...这很奇怪,但我无法理解...也许关于RST, ACK 响应的线索?

如果我从 apache conf 中删除了 ServerName 值,那么 Wireshark 会向客户端显示 Client Hello 的 TLSv1, 没有任何更改。也许我没有正确解释 Wireshark 向我显示的内容......

但是,我确实在该 ACK 消息中看到了 Reset bit/flag set - 我相信 .NET 会解释并向客户端发送异常 - 我不明白为什么会发生这种情况,因此发布了这个问题。


我还尝试在 apache conf 文件中设置 SSLStrictSNIVHostCheck off 而不是 ServerName 更改,希望完全更改为 disabling SNI

Wireshark 和客户端应用程序显示与 Unrecognized name 问题有关的相同错误。

然后我尝试设置SSLStrictSNIVHostCheck off AND 正确设置ServerName

Wireshark 和客户端应用程序显示了与 forcibly closed 错误相关的相同响应。


是否有一些 apache conf 设置可以允许这种通信而不会出错? ...或者如果有人可以指出我确定是什么导致 RESET 标志的方向...

或者在 C# 客户端代码中是否有某种方法可以避免发送带有握手的 SNI(客户端问候)? ...这就是 XP 起作用的原因;那时它不会发送 SNI 分机。

...到目前为止,我为此找到的唯一可行的替代方法是将客户端迁移到 .NET 4.0 --- 但是,这对于这个代码库目前是不可行的。

【问题讨论】:

    标签: apache ssl c#-2.0


    【解决方案1】:

    最终将客户端迁移到 .NET 4.0+ 以解决问题 - 没有简单的解决方法

    【讨论】:

      猜你喜欢
      • 2015-03-30
      • 2018-10-21
      • 2014-12-26
      • 2014-01-11
      • 1970-01-01
      • 2012-12-04
      • 2011-04-26
      • 2015-07-23
      • 2020-05-31
      相关资源
      最近更新 更多