4

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

此证书private key在将它们组合成pfx格式后导入到存储中,然后将该pfx文件导入到 windows 证书存储中。现在,当使用管理单元导入此 pfx 文件mmc时,它会询问我们是否要制作私钥exportable。现在 OpenSSL 出现在图片中,用于建立 SSL 连接。

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

由于私钥将始终如此标记Non-Exportable,是否有任何 OpenSSL 的方法或 API 等可以直接从 Windows 证书存储读取私钥并将其加载到 SST_CTX 对象中以进行 SSL 连接。

我知道肯定有某种方法可以使它起作用,但我不明白。我为此搜索了很多,但没有得到所需的东西。

总结性问题:证书存储拥有许多证书和相关的私钥。建立 SSL 连接时如何访问证书和私钥?

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

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

现在我怎样才能得到这个key_id私钥,而且我认为这个 api 在内部称为加密 api CryptExportKey,如果私钥被标记,这个 api 会失败non-exportable

4

0 回答 0