Как указать / получить доступ к функции CertCreateCertificateContext файла сертификата? (WinCrypt API)

Немного новичок в программировании Windows /C++. Я пытаюсь установить файл корневого сертификата.p7b в хранилище доверенных корневых сертификатов. Я хочу использовать библиотеку Windows Wincrypt. В частности, это рекомендуемые шаги, которые я получил на старом форуме:

  1. Вызов CertCreateCertificateContext используя байты содержимого вашего сертификата, чтобы получить PCCERT_CONTEXT
  2. Вызов CertOpenSystemStore с szSubsystemProtocol установите "ROOT", чтобы получить HCERTSTORE
  3. Вызов CertAddCertificateContextToStore используя вышеуказанное HCERTSTORE а такжеPCCERT_CONTEXT.

[Вот] документация по API для CertCreateCertificateContext. Не знаю, как просто указатьpbCertEncodedв мой фактический файл сертификата. Мне просто указать им путь? Должен ли я загружать сертификат? Какой должен быть тип?

1 ответ

Решение

Из ответа Саймона Розмана в этом посте: Мы должны использоватьCertOpenStore() вместо тогоCertCreateCertificateContext(), который поддерживает только один сертификат, тогда как файл PKCS #7 может содержать несколько.

После открытия хранилища сертификатов вы можете использовать CertEnumCertificatesInStore() для получения контекста сертификата отдельных сертификатов из магазина.

Итак, из моих первоначальных шагов по успешной установке p7b в корневое хранилище:

  1. Вызов CertOpenStore()для корневого хранилища и для самого сертификата. Это даст вам дваHCERTSTORE ручки.

  2. Создайте цикл while, который добавит контексты сертификатов в открытое корневое хранилище (используя CertAddCertificateContextToStore()), пока существует контекст сертификата (проверьте, используя CertEnumCertificatesInStore() в открытом хранилище сертификатов).

Другие вопросы по тегам