Генерация самозаверяющего сертификата создает дубликаты в хранилище

Во время установки нашего приложения мы генерируем самоподписанный сертификат. Мы используем 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

Решение

Чтобы проверить, существуют ли ваши сертификаты, вы, вероятно, хотите использовать CertEnumSystemStore + CertFindCertificateInStore выкинуть все установленные сертификаты. Затем вы можете запросить и проверить свойство, которое, как вы знаете, идентично (например, имя издателя X500).

Здесь есть довольно глубокий пример:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa382362.aspx

1

Другие решения

Я понял, что, поскольку мы хотели записать сертификаты в файл, нам было гораздо лучше вообще не вставлять их в хранилище.

Поэтому я сейчас генерирую сертификат во временном магазине.

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