如何在TLS1.2握手过程中忽略服务器请求的签名哈希算法?

How to ignore signature hash algorithm requested by server during TLS1.2 handshake?

我有一个 C# 应用程序通过相互身份验证与另一家公司的服务器建立成功的 TCP TLS 1.0 连接。它是使用 SslStream class 实现的。我们只是这个非常大的组织的众多客户之一。

上面的这个 TCP link 必须经过 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 替代方案?有没有开源的第三方解决方案?任何建议都会有所帮助。提前致谢。

上述问题最终在没有任何特殊代码更改的情况下得到解决:在我们这边添加了代理服务器。它负责与对方的沟通。代理服务器能够忽略传入证书请求中的特定 SHA1/RSA 签名哈希算法。