gpt4 book ai didi

certificate - 如何将 HCRYPTKEY 或 PRIVATEKEYBLOB 导出到 PFX 文件

转载 作者:行者123 更新时间:2023-12-04 02:37:19 32 4
gpt4 key购买 nike

我有一个以前生成的 RSA 私有(private)签名 key ,它存储为 PRIVATEKEYBLOB .我正在尝试将其移至新证书中,以便更好地管理 key 。如何获取此 blob 并将其转换为 .pfx 证书?

我有一个 HCRYPTPROV(使用 MS_ENHANCED_PROV 和 PROV_RSA_FULL)。
我可以从 CryptImportKey 获得 HCRYPTKEY。

PFXExportCertStoreEx 似乎是将其导出到 PFX blob 的函数(我假设我会随后将其写入文件),但我不明白如何将 key 放入其中。

最佳答案

如果我正确理解您的问题,您将证书和相应的私钥作为数据 blob,两者都是 分别 .如果您使用 CryptoAPI,请务必了解该 API 主要面向使用存储在证书存储中的证书和存储在 key 容器中的私钥。函数如PFXExportCertStoreEx遵循该方法,并允许您将所有证书从一个证书存储导出到数据 blob,该数据 blob 可以保存为具有 .PFX 扩展名的文件。

因此,您可以执行以下操作:

  • 按使用创建临时证书存储CertOpenStoreCERT_STORE_PROV_MEMORY范围。
  • 使用 CertAddEncodedCertificateToStore 将证书 blob 放置到存储区功能。
  • 使用 CryptAcquireContext 创建新的 key 容器与 CRYPT_NEWKEYSET选项。您应该为容器指定一个唯一的名称(参见函数的pszContainer 参数)。
  • PRIVATEKEYBLOB 导入信息,您目前拥有的,关于 CryptImportKey 的 key 容器功能。
  • 将证书存储中的证书绑定(bind)到 key 容器。为此,您应该使用 CertSetCertificateContextProperty设置CERT_KEY_PROV_INFO_PROP_ID这就是证书的扩展属性。重要的是要理解扩展属性不是
    X.509 规范。扩展属性允许您将与证书关联的一些附加信息存储在证书存储中(而不是证书本身)。如果是 CERT_KEY_PROV_INFO_PROP_ID您可以存储描述 key 容器的完整信息 (CRYPT_KEY_PROV_INFO)。
  • 现在可以使用PFXExportCertStoreEx将临时证书存储(仅包含一个证书并具有到 key 容器的链接)导出到内存 blob,然后将内存 blob 保存在 .PFX 文件中。
  • 您应该删除在步骤 3 中创建的 key 容器。为此,您需要使用 CryptAcquireContext 打开 key 容器与 CRYPT_DELETEKEYSET选项。
  • 关于certificate - 如何将 HCRYPTKEY 或 PRIVATEKEYBLOB 导出到 PFX 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12260833/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com