我正在使用Microsoft Crypto API处理SSL连接。与支持TLS 1.0或更高版本的服务器通信一切正常,但是当我尝试处理仅支持SSL 3.0的服务器时,
我尝试操作传递给
所以问题是:
当我将
是否有可能在MS Crypto API中启用TLS 1.0、1.1、1.2和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协议进行握手过程,但实际上它会失败,并显示错误0x80090331
(SEC_E_ALGORITHM_MISMATCH
,客户端和服务器无法通信,因为它们没有共同的算法)。是否有可能在MS Crypto API中启用TLS 1.0、1.1、1.2和SSL 3.0?