Поделиться через


Функция 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

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

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