1

我想从 Windows 商店获取私钥并将其转换为 PEM 以便在 OpenSSL 中使用它。几个小时以来,我一直在寻找一种方法来做到这一点!

  • 我使用 CertFindCertificateInStore() 来获取 CERT_CONTEXT (我知道它包含使用搜索参数的私钥)。
  • 接下来,我使用 CryptAcquireCertificatePrivateKey() 来获取 HCRYPTPROV(只是因为函数的名称)。
  • 现在,我使用 CryptGetUserKey() 来获取 HCRYPTKEY (只是因为它听起来正确......?!)

但现在我又被困住了。

我认为这是微软为确保我们永远无法获得私钥所做的默默无闻的安全措施。

4

2 回答 2

2

我将保持原样(毕竟没有 dbasic 我会被卡住:-)),但我还有更多要补充的:

CryptExportPKCS8() 支持终止于 XP/2003,因此我们必须使用 PFXExportCertStoreEx() ,但是此函数导出整个存储。因此,为了只导出一个证书,您需要使用内存存储。

查看此示例以了解如何执行此操作:http: //msdn.microsoft.com/en-us/library/windows/desktop/aa382037 (v=vs.85).aspx

将所需的证书插入内存存储区,然后使用 PFXExportCertStoreEx() 导出所需的证书。

于 2013-05-28T13:46:25.917 回答
0

前两个没问题。但是您需要使用CryptExportPKCS8。它将私钥以 PKCS #8 DER 编码形式导出到缓冲区。从 PKCS #8,您可以将其放入 OpenSSL 的 X509 结构中(通过使用 d2i 函数和内存缓冲区作为 BIO 结构中的输入)。

但是,如果将私钥标记为不可导出,则此功能将失败。

你唯一能做的就是使用这样的私钥对数据进行签名。

于 2013-05-28T04:08:43.877 回答