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

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

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

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


person bwang    schedule 17.04.2020    source источник


Ответы (1)


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

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

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

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

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

person bwang    schedule 07.05.2020