我正在使用Microsoft Crypto API来处理SSL连接.当与支持TLS 1.0或更高版本的服务器通信时,一切正常,但是当我尝试处理仅支持SSL 3.0的服务器时,InitializeSecurityContext()错误代码为0x80090331(SEC_E_ALGORITHM_MISMATCH).
我试着玩SCHANNEL_CRED传递给结构AcquireCredentialsHandle()的pAuthData参数.特别是它具有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?