我有一个 C# 应用程序成功建立了 TCP TLS 1.0 连接,并与另一家公司的服务器进行了相互身份验证。它是使用 SslStream 类实现的。我们只是这个非常大的组织的众多客户之一。
上面这个 TCP 链接必须经过 TLS 1.2 + SHA2 升级。在我们完成所有必要的步骤并使用我们的本地服务器成功测试之后,我们仍然无法尝试连接到远程服务器。长期调查显示,在 TLS 握手期间,服务器向我们发送证书请求,其中只有签名哈希算法 = SHA1-RSA 的选项(见下图)。我们的证书是 SHA256。结果,SslStream 根本没有将我们的证书发送到服务器,服务器将此视为握手失败并关闭连接。
造成这种麻烦的原因是我们的交易对手使用非常旧的 (10.x) 版本的 F5 防火墙来终止 SSL。尽管它支持客户端的 SHA2 证书,但它只在证书请求中发送 SHA1/RSA 签名哈希算法。
在承认上述事实的同时,我们的交易对手无法尽快升级 F5。他们建议忽略请求的签名哈希算法并发送我们的 SHA256 证书。显然,连接到他们的其他客户能够以某种方式做到这一点。
不幸的是,.Net 的 SslStream 没有为 TLS 握手提供那种级别的微调。
因此问题是:是否可以完全忽略服务器对基于 SHA1RSA 的证书的请求?我有什么选择?是否有实现 TLS 1.2 的 SslStream 替代方案?有开源的第三方解决方案吗?任何建议都会有所帮助。提前致谢。