如何在Windows XP的.Net 4中将TLS请求发送到禁用SSL3的服务器?

问题描述:

我支持使用.Net 4.0(Visual Studio 2010)构建的Windows应用程序,该应用程序将各种Web服务连接到我们的Apache Web服务器上。由于Poodle bug,这些服务器上的SSL3已被禁用。该应用程序的更新版本使用启用TLS WebClient类,可以成功连接:如何在Windows XP的.Net 4中将TLS请求发送到禁用SSL3的服务器?

using (var client = new WebClient()) 
{ 
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls; 

    client.DownloadString(uri); 
} 

不是我们的客户停留在Windows XP中(然而迫使他们升级操作系统是不幸不可能的)。我可以重现他们的错误报告,SSL/TLS通道无法建立。

即使禁用证书检查(仅供测试)没有帮助:

 ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; 

从我的研究,我知道,Windows XP和.NET 4.0支持TLS 1.0,所以理论上这应该还是有可能。由于抛出的异常中提供的信息很少,我无法找到确切的失败。

这可能是服务器配置的问题吗?

样品网址:https://api.meteotest.ch/ssl.txt

MSDN你会发现Windows XP所支持的加密套件。这表明,XP不支持任何AES密码套件。但是,如SSLLabs所示,服务器支持的所有密码都是AES。因此,客户端和服务器之间不存在通用密码,SSL握手将失败,这在SSLLabs的输出中也显示为XP。

由于RC4也被打破,我不会推荐使用任何RC4密码。因此,最好启用3DES密码来支持XP客户端,即TLS_RSA_WITH_3DES_EDE_CBC_SHA(apache配置中的DES-CBC3-SHA)。当然,你应该把这个密码放在最后,所以只有当客户端不支持其他密码时才能使用。