SSL/TLS协议版本回退机制

5
我正在使用Microsoft Crypto API处理SSL连接。与支持TLS 1.0或更高版本的服务器通信一切正常,但是当我尝试处理仅支持SSL 3.0的服务器时,InitializeSecurityContext()会失败,并显示错误代码0x80090331(SEC_E_ALGORITHM_MISMATCH)。
我尝试操作传递给AcquireCredentialsHandle()作为pAuthData参数的SCHANNEL_CRED结构。特别地,它有一个字段grbitEnabledProtocols,应该控制支持的协议集。当我设置grbitEnabledProtocols=SP_PROT_SSL3时,一切正常,但这会破坏安全性,因为我还要支持TLS 1.0、1.1和1.2,并且无法与出于安全原因禁用SSL 3.0的服务器通信。
所以问题是:
当我将grbitEnabledProtocols=SP_PROT_SSL3TLS1_X设置并尝试与仅支持SSL 3.0的服务器通信时,连接开始为TLS 1.2,然后服务器响应SSL 3.0标头和相应的数据。按照RFC,Crypto API应继续使用SSL 3.0协议进行握手过程,但实际上它会失败,并显示错误0x80090331SEC_E_ALGORITHM_MISMATCH,客户端和服务器无法通信,因为它们没有共同的算法)。
是否有可能在MS Crypto API中启用TLS 1.0、1.1、1.2和SSL 3.0?
1个回答

0

作为调试的一部分,您可以做两件事情。

1> 检查您正在使用的API中是否有指定支持的协议的方法。

2> 尝试包含所有可能的加密和哈希算法。

这两个选项都可以在OpenSSL中找到。

最好的调试方法是使用Wireshark并查看SSL协议发送的错误代码。


1> 我尝试指定协议,并且问题在详细描述中。您是否阅读了包括grbitEnabledProtocols的部分?这是应该指定支持的协议的地方。 2> 我包含了所有的协议和加密,但它没有起作用。 我发现OpenSSL也有同样的问题,至少有一个带有相同问题的线程:http://openssl.6102.n7.nabble.com/Need-inputs-suggestions-on-SSL-TLS-protocol-version-fallback-mechanism-td25597.html - Mikhail Melnik

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