【问题标题】:How to point to/access a cert file `CertCreateCertificateContext` function? (wincrypt api)如何指向/访问证书文件`CertCreateCertificateContext`函数? (wincrypt api)
【发布时间】:2020-07-30 15:10:34
【问题描述】:
Windows 编程/C++ 的一些新知识。我正在尝试将 .p7b 根证书文件安装到受信任的根证书存储中。我想使用 Windows Wincrypt 库。具体来说,这些是我从旧论坛获得的建议步骤:
- 使用您的证书内容字节呼叫
CertCreateCertificateContext
为了获得PCCERT_CONTEXT
- 调用
CertOpenSystemStore 并将szSubsystemProtocol 设置为“ROOT”
为了获得HCERTSTORE
- 使用上述
HCERTSTORE 呼叫CertAddCertificateContextToStore 和
PCCERT_CONTEXT。
[这里是]CertCreateCertificateContext 的 api 文档。不知道如何将pbCertEncoded 指向我的实际证书文件。我应该把它指向路径吗?我必须加载证书吗?类型应该是什么?
【问题讨论】:
标签:
c++
windows
certificate-store
wincrypt
p7b
【解决方案1】:
来自 Simon Rozman 在 post 中的回答:我们必须使用 CertOpenStore() 而不是
CertCreateCertificateContext(),只支持一个证书,而PKCS#7文件可以包含多个。
证书存储打开后,您可以使用CertEnumCertificatesInStore() 从存储中检索单个证书的证书上下文。
所以从我最初的步骤成功将 p7b 安装到根存储中:
为根存储和实际证书本身调用 CertOpenStore()。这将为您提供两个HCERTSTORE 句柄。
有一个 while 循环,只要证书上下文存在,就会将证书上下文添加到打开的根存储区(使用 CertAddCertificateContextToStore())(在打开的证书存储区上使用 CertEnumCertificatesInStore() 检查)。