2013-10-02 3 views
0

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

ответ

1

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

Существует достаточно углубленные образец здесь:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa382362.aspx

0

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

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

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