尝试在XP sp3上使用.NET 4.0运行TLS1.2

3

在开始之前,我知道正确的做法是升级操作系统。我正在尝试解决这个问题,正如你所想象的那样,有很多死路。我找到了一些似乎有效的东西,但我不清楚具体原因,并寻求帮助。

Windows XP不支持SSL/TLS 1.1/1.2
来源1
来源2

.Net 4.0不支持TLS 1.2
来源3

.Net 4.5+支持TLS 1.2,但无法安装在XP系统上。
来源4 来源5

如果您使用自己的证书验证来覆盖ServerCertificateValidationCallback,则可以正常工作。为什么?发生了什么? 它似乎通过SSL进行通信。网络操作向我保证服务器上没有回退SSL / TLS。

替代方法:获取适用于旧版TLS 1.0的自签名证书,无法从CA获得此证书。
使用其他支持TLS 1.2的C++库或类似产品,并从.NET中调用它。

更新1: 我仍然不知道为什么ServerCertificateValidationCallback似乎有效。现在我正在查看特定于XP SP3的Cipher Suite支持情况。 我正在查看数据包并使用这篇文章作为指南。正如所指出的那样,即使我找到另一种可行的库,如果未提供或接受Cipher Suite,则仍无法解决问题。

密码套件指南

我尝试使用SecureBlackBox,取得了一定的成功(使用了TLS1.2),但我无法让它授权证书颁发机构的证书。 https://www.eldos.com/sbb/

更新2:我正在学习这个工作原理,感谢Ullrich先生等人。

更新3:目前,我正在考虑在XP机器上使用Apache代理进行TLS1.2 SHA256 CA验证通信(非Windows堆栈),并使我的.NET 4.0通信在本地与此代理通信,而离开该机器的任何通信都得到适当的安全保障。


2
非常有帮助,谢谢。 - Joe Volcano
1个回答

1
证书及其验证与TLS版本无关。您可以在SSL 3.0...TLS 1.3中使用相同的证书。但仅仅因为您的证书可以与所有这些一起使用,并不能使您的本地TLS栈自动了解TLS 1.2协议的工作方式。
如果您想在Windows XP上获得TLS 1.2支持,请查看Windows TLS栈之外的库,例如OpenSSL、NSS和其他库。看起来有一个库提供对.NET中最新OpenSSL的支持,但我不确定这是否仍然适用于XP。请参见https://github.com/openssl-net/openssl-net

那么它是否正在使用SSL/TLS进行通信?如果是,那么是哪个版本?它是SHA256吗?我的理解是,您可以购买一个SHA256证书,而TLS 1.2可以处理它,而TLS 1.0则不能。我错过了什么,这些是无关的吗?我会查看您提到的链接,谢谢! - Joe Volcano
@JoeVolcano:“我的理解是,您可以购买一个SHA256和TLS 1.2可以处理它而TLS 1.0不能的证书。”-这种理解是错误的。再次强调,证书实际上与TLS版本无关。您也可以在TLS 1.0中使用SHA-256签名证书。任何限制只取决于实际实现而不是协议。 - Steffen Ullrich
@JoeVolcano:如果TLS堆栈不支持TLS 1.2(即Windows XP上的SChannel),那么使用理论上可用于TLS 1.2的证书也没有帮助。 - Steffen Ullrich
我分析了握手数据包并观察到它似乎在使用TLS1.0。我使用了一个非Windows堆栈套接字模块,但仍然没有成功。主要是因为它在验证SHA256证书与CA时遇到了困难。如果我忽略验证,它可以使用新的SSL证书进行通信。服务器确实支持SNI,但我们只有一个证书,所以不确定如何会得到错误的证书,因为只有一个证书,如果我们覆盖证书的验证,它就能正常工作。 - Joe Volcano
从当前信息来看很难确定出现了什么问题,但我怀疑这与SHA-256无关,因为XP(最新SP)和OpenSSL都应该能够处理这个问题。如果您使用OpenSSL后端,则更有可能找不到受信任的根证书,因为我怀疑OpenSSL不使用Windows信任存储。 - Steffen Ullrich
显示剩余2条评论

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