如何指向to/access一个证书文件`CertCreateCertificateContext`函数? (wincrypt api)

How to point to/access a cert file `CertCreateCertificateContext` function? (wincrypt api)

windowsprogramming/C++ 有点新。我正在尝试将 .p7b 根证书文件安装到受信任的根证书存储区。我想使用 Windows Wincrypt 库。具体来说,这些是我从旧论坛获得的建议步骤:

  1. 使用您的证书内容字节调用 CertCreateCertificateContext 为了获得 PCCERT_CONTEXT
  2. 调用 CertOpenSystemStore 并将 szSubsystemProtocol 设置为 "ROOT" 为了获得HCERTSTORE
  3. 使用上述 HCERTSTORE 调用 CertAddCertificateContextToStorePCCERT_CONTEXT

[这里是] CertCreateCertificateContext 的 api 文档。不确定如何将 pbCertEncoded 指向我的实际证书文件。我应该把它指向路径吗?我必须加载证书吗?类型应该是什么?

来自 Simon Rozman 在 post 中的回答:我们必须使用 CertOpenStore() 而不是 CertCreateCertificateContext(),它只支持一个证书,而 PKCS #7 文件可以包含多个。

证书存储打开后,您可以使用CertEnumCertificatesInStore()从存储中检索单个证书的证书上下文。

所以从我最初成功安装 p7b 到根存储的步骤:

  1. 为根存储和实际证书本身调用 CertOpenStore()。这将为您提供两个 HCERTSTORE 句柄。

  2. 有一个 while 循环将证书上下文添加到打开的根存储(使用 CertAddCertificateContextToStore())只要证书上下文存在(检查使用 CertEnumCertificatesInStore()打开证书存储)。