在安装我们的应用程序期间,我们会生成一个自签名证书。我们使用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)
答案 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;
}