生成自签名证书会在商店中创建重复项

时间:2013-10-02 14:17:02

标签: c++ windows x509 certificate-store

在安装我们的应用程序期间,我们会生成一个自签名证书。我们使用Crypt API生成证书并将其插入商店。

问题是我们在重新安装应用程序时会生成证书的副本。这只会使证书商店弄得一团糟。

如何检查证书是否已到位?或者我可以使用一些选项来覆盖现有证书吗?

hStore = CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, NULL, CERT_STORE_OPEN_EXISTING_FLAG | CERT_SYSTEM_STORE_CURRENT_USER, L"My");
if (!hStore) {
    return 0;
}
CertAddCertificateContextToStore(hStore, pCertificate, CERT_STORE_ADD_REPLACE_EXISTING, 0)

2 个答案:

答案 0 :(得分:1)

要检查您的证书是否已存在,您可能希望使用CertEnumSystemStore + CertFindCertificateInStore转储所有已安装的证书。然后,您可以查询并测试您知道的相同属性(例如X500颁发者名称)。

这里有一个相当深入的样本:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa382362.aspx

答案 1 :(得分:0)

我意识到,由于我们想将证书写入文件,我们最好不要将它们实际插入到商店中。

因此我现在在临时商店中生成证书。

hStore = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, NULL, 0, NULL);
if (!hStore) {
    return 0;
}