CryptoAPI 2.0 私钥

通道凭据在内部表示为 CERT_CONTEXT 结构。 Schannel 使用证书的 CERT_KEY_PROV_INFO_PROP_ID 属性查找与特定证书上下文关联的 私钥 。 使用此属性,Schannel 通过调用 CryptAcquireContext 函数来访问私钥。 有关其他详细信息,请参阅 公钥/私钥对

每个 Schannel 凭据都包含对一个或多个私钥的引用,每个私钥都与特定证书相关联。 私钥的处理方式完全不同,具体取决于凭据是针对客户端还是服务器。

客户端私钥

客户端 私钥加密服务提供程序 管理, (正在使用的 CSP) 。 客户端私钥通常由 PROV_RSA_FULL 或 PROV_RSA_SIGNATURE 类型的 CSP 存储。

如果客户端应用程序在调用 AcquireCredentialsHandle 之前手动进行 CryptAcquireContext 调用,则客户端必须使用 CERT_KEY_PROV_HANDLE_PROP_ID 属性将 CSP 的句柄绑定到证书上下文。 如果 Schannel 找到此属性集,则它不使用 CERT_KEY_PROV_INFO_PROP_ID 属性。

服务器私钥

服务器私钥由以下 CSP 之一存储:

  • PROV_RSA_SCHANNEL
  • PROV_DH_SCHANNEL
  • PROV_FORTEZZA CSP

CSP 的选择取决于所选 密钥交换算法。 服务器私钥的类型必须为 AT_KEYEXCHANGE。