从SSLv3迁移到TLSv1

时间:2014-12-02 19:37:16

标签: apache ssl c#-2.0

关于POODLE,现在在服务器上禁用SSLv3 客户端软件是在.NET 2.0中开发的,并提供TLSv1作为唯一选择。我有权访问并能够对客户端应用程序和服务器配置进行更改。

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

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

初始问题(described here)与收到关于TLS Alert的{​​{1}}有关。

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

Unrecognized name

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

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

To correct this issue,修改了apache conf文件以包含正确的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 值。


现在我不再收到ServerName警告,但我看到了另一个问题:

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

Unrecognized name

客户端在此调用上抛出不同的异常:

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

有趣的是,Wireshark在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 的协议列中显示了SSL - 我怀疑这可能与Client Hello异常有关 - BUT ,展开显示的框架下方的forcibly closed部分,显示使用了TLSv1 ......这很奇怪,但我无法理解它......或许是关于{{的线索1}}回复?

如果我从apache conf中删除Secure Sockets Layer值,则Wireshark会向RST, ACK 显示TLSv1,而不会对客户端进行任何更改。也许我没有正确解释Wireshark向我展示的内容......

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


我还尝试在apache conf文件中设置Client Hello,而不是Reset bit/flag set更改希望disabling SNI

Wireshark和客户端应用程序显示与SSLStrictSNIVHostCheck off问题相同的错误。

然后我尝试正确设置ServerName AND 设置Unrecognized name

Wireshark和客户端应用程序显示与SSLStrictSNIVHostCheck off错误相同的响应。


是否有一些apache conf设置可以允许此通信没有错误? ......或者如果有人能够指出我确定导致RESET标志的原因......

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

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

0 个答案:

没有答案