0

我最近研究了 Windows 中的证书。

我尝试了两种不同的方式来安装证书:
1. 使用 certutil 命令安装。例如:certutil -addstore -f "ROOT" rootCA.pem
2. 使用微软 api 安装。

certStore = CertOpenSystemStore(NULL, "ROOT")
CertAddEncodedCertificateToStore(
    certStore,
    X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
    rootCACert,
    len(rootCACert),
    CERT_STORE_ADD_REPLACE_EXISTING,
    NULL
)

安装后,我用certmgr.msc它来检查它是否成功。
并且Firefox的security.enterprise_roots.enabled设置为True。

但是我发现了一个奇怪的情况。
Firefox 只信任 certutil 安装的证书。

有人可以告诉我为什么吗?

提前致谢!

4

1 回答 1

0

根据Mozilla Wiki,版本之间存在差异:

从版本 49 开始,... Firefox 将检查 HKLM\SOFTWARE\Microsoft\SystemCertificates 注册表位置(对应于 API 标志 CERT_SYSTEM_STORE_LOCAL_MACHINE)

从版本 52 开始,Firefox 还将搜索注册表位置 HKLM\SOFTWARE\Policies\Microsoft\SystemCertificates\Root\Certificates 和 HKLM\SOFTWARE\Microsoft\EnterpriseCertificates\Root\Certificates(分别对应于 API 标志 CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY 和 CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE)。

所以很高兴知道你使用的是什么版本。

回答您的问题:由于搜索的商店的标志在 wiki 中命名,您似乎在 API 解决方案中使用了错误的商店。看看函数CertOpenStore而不是CertOpenSystemStore. 这允许通过例如CERT_SYSTEM_STORE_LOCAL_MACHINEdwFlags 来打开 Mozilla 搜索的商店。

于 2019-04-11T07:23:21.807 回答