我正在使用OpenSSL API创建 SSL 连接 . 正如我们在SSL握手中所知,服务器或客户端会发生一系列证书身份验证 . 现在,对于客户端证书身份验证,客户端的证书和关联的私钥存储在 Windows Certificate Store 中 .

带有 private key 的证书在将它们组合成 pfx 格式后导入到商店中,然后将 pfx 文件导入到Windows证书库 . 现在,在使用 mmc 管理单元导入此pfx文件时,它会询问我们是否要创建私钥 exportable . 现在,OpenSSL开始实现SSL连接 .

为此,我们必须创建 SSL_CTX 对象,其中加载了所有与连接相关的属性 . 现在,为了将私钥从Windows证书库加载到 SSL_CTX 对象中,我已经使用 Crypto API 标记了我要导出密钥的私钥 exportable . 但我认为标记可出口的私钥没有任何意义,这是一个安全漏洞 .

由于私钥将始终标记为 Non-Exportable 所以,是否有任何OpenSSL等方法或API可以直接从Windows证书存储区读取和加载私钥到SST_CTX对象以进行SSL连接 .

我知道肯定有一些方法可以使用它,但我没有得到它 . 我已经搜索了很多但没有得到必要的东西 .

Summarized Question :证书存储区包含许多证书和关联的私钥 . 进行SSL连接时如何访问证书和私钥?

EDIT :我已经通过了一个名为的openssl引擎API

`EVP_PKEY *ENGINE_load_private_key(ENGINE *e, const char *key_id,
      UI_METHOD *ui_method, void *callback_data);`

现在我怎么能得到这个私钥的 key_id ,而且我认为这个api内部叫做crypto api CryptExportKey ,如果私钥被标记为 non-exportable ,这个api会失败 .