我最近研究Windows中的证书。
我尝试了两种不同的方式来安装证书:
1.使用certutil命令进行安装。例如:certutil -addstore -f "ROOT" rootCA.pem
2.使用Microsoft 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安装的证书。
有人可以告诉我为什么吗?
提前致谢!
根据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_MACHINE
作为dwFlags打开商店Mozilla搜索。