【发布时间】:2014-02-02 17:38:29
【问题描述】:
我正在使用 Microsoft Crypto API 来处理 SSL 连接。与支持 TLS 1.0 或更高版本的服务器通信时,一切正常,但是当我尝试处理仅支持 SSL 3.0 的服务器时,InitializeSecurityContext() 失败,错误代码为 0x80090331 (SEC_E_ALGORITHM_MISMATCH)。
我尝试使用作为pAuthData 参数传递给AcquireCredentialsHandle() 的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?
【问题讨论】:
标签: c++ visual-c++ ssl cryptography cryptoapi