Функция CertGetIssuerCertificateFromStore (wincrypt.h)
Функция CertGetIssuerCertificateFromStore извлекает контекст сертификата из хранилища сертификатов для первого или следующего издателя указанного сертификата субъекта. Вместо использования этой функции рекомендуется использовать новые функции проверки цепочки сертификатов .
Синтаксис
PCCERT_CONTEXT CertGetIssuerCertificateFromStore(
[in] HCERTSTORE hCertStore,
[in] PCCERT_CONTEXT pSubjectContext,
[in, optional] PCCERT_CONTEXT pPrevIssuerContext,
[in, out] DWORD *pdwFlags
);
Параметры
[in] hCertStore
Дескриптор хранилища сертификатов.
[in] pSubjectContext
Указатель на структуру CERT_CONTEXT , содержащую сведения о субъекте. Этот параметр можно получить из любого хранилища сертификатов или создать вызывающим приложением с помощью функции CertCreateCertificateContext .
[in, optional] pPrevIssuerContext
Указатель на структуру CERT_CONTEXT , содержащую сведения об издателе. У издателя может быть несколько сертификатов, особенно при изменении срока действия. Этот параметр должен иметь значение NULL в вызове , чтобы получить первый сертификат издателя. Чтобы получить следующий сертификат для издателя, задайте для pPrevIssuerContextCERT_CONTEXT структуру, возвращенную предыдущим вызовом.
Эта функция освобождает CERT_CONTEXT , на которые ссылаются значения этого параметра, отличные от NULL .
[in, out] pdwFlags
Следующие флаги позволяют проверять возвращенный сертификат. Их можно объединить с помощью побитовой операции ИЛИ , чтобы включить несколько проверок.
Если проверка проверки включенного типа завершается успешно, его флагу присваивается нулевое значение. В случае сбоя флаг остается установленным после возврата. Для CERT_STORE_REVOCATION_FLAG проверка выполняется успешно, если функция не находит список отзыва сертификатов, связанный с сертификатом субъекта.
Если CERT_STORE_REVOCATION_FLAG задано, а у издателя нет списка отзыва сертификатов в хранилище, CERT_STORE_NO_CRL_FLAG задано, а CERT_STORE_REVOCATION_FLAG остается заданным.
Если задано CERT_STORE_SIGNATURE_FLAG или CERT_STORE_REVOCATION_FLAG, CERT_STORE_NO_ISSUER_FLAG устанавливается, если функция не находит сертификат издателя в хранилище. Дополнительные сведения см. в разделе Комментарии.
В случае сбоя проверки проверка по-прежнему возвращается указатель на CERT_CONTEXT издателя, а GetLastError не обновляется.
Возвращаемое значение
Если функция выполняется успешно, возвращаемое значение является указателем на CERT_CONTEXT издателя, доступного только для чтения.
Если функция завершается сбоем и первый или следующий сертификат издателя не найден, возвращается значение NULL.
Только последний возвращенный CERT_CONTEXT структуры должен быть освобожден путем вызова CertFreeCertificateContext. Если возвращаемое CERT_CONTEXT из одного вызова функции предоставляется в качестве параметра pPrevIssuerContext при последующем вызове, контекст освобождается в рамках действия функции.
Чтобы получить дополнительные сведения об ошибке, вызовите Метод GetLastError. Ниже приведены некоторые возможные коды ошибок.
Код возврата | Описание |
---|---|
|
Для сертификата субъекта издатель не найден. |
|
Сертификат издателя совпадает с сертификатом субъекта. Это самозаверяющий корневой сертификат. |
|
Дескриптор в параметре hCertStore отличается от дескриптора контекста сертификата, на который указывает параметр pPrevIssuerContext , или в pdwFlags установлен неподдерживаемый флаг. |
Комментарии
Возвращаемый указатель освобождается при передаче в качестве параметра pPrevIssuerContext при последующем вызове функции. В противном случае указатель должен быть явно освобожден путем вызова CertFreeCertificateContext. PPrevIssuerContext, не имеющий значения NULL, всегда освобождается CertGetIssuerCertificateFromStore с помощью вызова CertFreeCertificateContext, даже если в функции есть ошибка.
Для создания дубликата сертификата издателя можно вызвать CertDuplicateCertificateContext.
Шестнадцатеричные значения для dwFlags можно объединить с помощью побитовой операции ИЛИ , чтобы включить несколько проверок. Например, чтобы включить срок действия подписи и времени, значение, 0x00000003, передается в dwFlags при входных данных. В этом случае, если проверка CERT_STORE_SIGNATURE_FLAG выполнена успешно, но CERT_STORE_TIME_VALIDITY_FLAG проверка завершается сбоем, dwFlags возвращает 0x00000002 выходных данных.
Требования
Минимальная версия клиента | Windows XP [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2003 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | wincrypt.h |
Библиотека | Crypt32.lib |
DLL | Crypt32.dll |