如何在Windows XP上的.Net 4中向禁用SSL3的服务器发出TLS请求

本文关键字:SSL3 服务器 请求 TLS Windows XP 上的 Net | 更新日期: 2023-09-27 18:27:22

我支持使用.Net 4.0(Visual Studio 2010)构建的Windows应用程序,该应用程序连接到Apache web服务器上的各种web服务。由于Poodle错误,SSL3在这些服务器上已被禁用。应用程序的更新版本正在使用启用TLS的WebClient类,并且可以成功连接:

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,所以理论上这仍然是可能的。由于抛出的异常中提供的信息很少,我无法确定到底是什么失败了。

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

示例URL:https://api.meteotest.ch/ssl.txt

如何在Windows XP上的.Net 4中向禁用SSL3的服务器发出TLS请求

在MSDN上,您可以找到Windows XP支持的密码套件。这表明XP不支持任何AES密码套件。但是,如SSLabs所示,服务器支持的所有密码都是AES。因此,客户端和服务器之间没有常见的密码,SSL握手将失败,这也在SSLabs的输出中显示了XP。

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