Функция 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_NO_CRL_FLAG
Указывает, что соответствующий список отзыва сертификатов не найден.
CERT_STORE_NO_ISSUER_FLAG
Указывает, что сертификат издателя не найден.
CERT_STORE_REVOCATION_FLAG
Проверяет, находится ли сертификат субъекта в списке отзыва издателя.
CERT_STORE_SIGNATURE_FLAG
Использует открытый ключ в сертификате издателя для проверки подписи сертификата субъекта.
CERT_STORE_TIME_VALIDITY_FLAG
Возвращает текущее время и проверяет, находится ли оно в пределах срока действия сертификата субъекта.
 

Если проверка проверки включенного типа завершается успешно, его флагу присваивается нулевое значение. В случае сбоя флаг остается установленным после возврата. Для 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. Ниже приведены некоторые возможные коды ошибок.

Код возврата Описание
CRYPT_E_NOT_FOUND
Для сертификата субъекта издатель не найден.
CRYPT_E_SELF_SIGNED
Сертификат издателя совпадает с сертификатом субъекта. Это самозаверяющий корневой сертификат.
E_INVALIDARG
Дескриптор в параметре 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

См. также раздел

Функции сертификата