Функция CertVerifyRevocation (wincrypt.h)

Функция CertVerifyRevocation проверяет состояние отзыва сертификатов, содержащихся в массиве rgpvContext . Если сертификат в списке будет отозван, дальнейшая проверка не выполняется. Этот массив может быть цепочкой сертификатов, распространяющейся вверх от конечной сущности к корневому центру, но такой характер списка сертификатов не является обязательным и не предполагается.

Синтаксис

BOOL CertVerifyRevocation(
  [in]           DWORD                   dwEncodingType,
  [in]           DWORD                   dwRevType,
  [in]           DWORD                   cContext,
  [in]           PVOID []                rgpvContext,
  [in]           DWORD                   dwFlags,
  [in, optional] PCERT_REVOCATION_PARA   pRevPara,
  [in, out]      PCERT_REVOCATION_STATUS pRevStatus
);

Параметры

[in] dwEncodingType

Указывает используемый тип кодирования. В настоящее время используются только X509_ASN_ENCODING и PKCS_7_ASN_ENCODING; однако в будущем могут быть добавлены дополнительные типы кодирования. Для любого из текущих типов кодировки используйте X509_ASN_ENCODING | PKCS_7_ASN_ENCODING.

[in] dwRevType

Указывает тип структуры контекста, передаваемой в rgpvContext. В настоящее время определяется только CERT_CONTEXT_REVOCATION_TYPE, отзыв сертификатов.

[in] cContext

Количество элементов в массиве rgpvContext .

[in] rgpvContext

Если параметр dwRevType CERT_CONTEXT_REVOCATION_TYPE, rgpvContext представляет собой массив указателей на CERT_CONTEXT структуры. Эти контексты должны содержать достаточные сведения, чтобы разрешить устанавливаемым или зарегистрированным библиотекам DLL отзыва найти сервер отзыва. Эти сведения обычно передаются в расширении, таком как расширение CRLDistributionsPoints, определенное Целевой группой по проектированию интернета (IETF) в PKIX, часть 1.

Для повышения эффективности, чем больше контекстов передается одновременно, тем лучше.

[in] dwFlags

Указывает на любые особые потребности в обработке. Этот параметр может быть одним из следующих флагов.

Значение Значение
CERT_VERIFY_REV_CHAIN_FLAG
Проверка цепочки сертификатов выполняется при условии, что каждый сертификат, кроме первого, является издателем сертификата, предшествующего ему. Если параметр dwRevType не является CERT_CONTEXT_REVOCATION_TYPE, предположения о порядке контекстов не делаются.
CERT_VERIFY_CACHE_ONLY_BASED_REVOCATION
Запрещает обработчику отзыва доступ к сетевым ресурсам для проверки отзыва.
CERT_VERIFY_REV_ACCUMULATIVE_TIMEOUT_FLAG
Если этот параметр задан, dwUrlRetrievalTimeout — это совокупное время ожидания для всех извлекаемых URL-адресов.
CERT_VERIFY_REV_SERVER_OCSP_FLAG
Если этот параметр задан, эта функция использует только протокол OCSP для проверки отзыва. Если у сертификата нет URL-адресов AIA OCSP, то члену dwError параметра pRevStatus присваивается значение CRYPT_E_NOT_IN_REVOCATION_DATABASE.

[in, optional] pRevPara

При необходимости задайте для оказания помощи в поиске издателя. Дополнительные сведения см. в разделе структура CERT_REVOCATION_PARA .

[in, out] pRevStatus

Перед вызовом CertVerifyRevocation необходимо задать только элемент cbSizeCERT_REVOCATION_STATUS, на который указывает pRevStatus.

Если функция возвращает значение FALSE, элементы этой структуры будут содержать сведения о состоянии ошибки. Дополнительные сведения см. в разделе CERT_REVOCATION_STATUS. Описание обновления pRevStatus при возникновении проблемы с проверкой отзыва см. в разделе Примечания.

Возвращаемое значение

Если функция успешно проверяет все контексты и ни одна из них не была отозвана, функция возвращает значение TRUE. Если функция завершается сбоем, она возвращает значение FALSE и обновляет структуру CERT_REVOCATION_STATUS , на которую указывает pRevStatus , как описано в CERT_REVOCATION_STATUS.

Когда обработчик отзыва для любого из контекстов возвращает значение FALSE из-за ошибки, то элемент dwError в структуре, на которую указывает pRevStatus , будет задан обработчиком, чтобы указать, какая ошибка была обнаружена. GetLastError возвращает код ошибки, равный ошибке, указанной в элементе dwErrorструктуры CERT_REVOCATION_STATUS . GetLastError может иметь одно из следующих значений.

Значение Описание
CRYPT_E_NO_REVOCATION_CHECK
Установленная или зарегистрированная функция отзыва не смогла выполнить проверка отзыва контекста.
CRYPT_E_NO_REVOCATION_DLL
Не найдена установленная или зарегистрированная библиотека DLL, которая смогла проверить отзыв.
CRYPT_E_NOT_IN_REVOCATION_DATABASE
Контекст для проверки не найден в базе данных сервера отзыва.
CRYPT_E_REVOCATION_OFFLINE
Невозможно подключиться к серверу отзыва.
CRYPT_E_REVOKED
Контекст был отозван. DwReason в pRevStatus содержит причину отзыва.
ERROR_SUCCESS
Контекст был хорошим.
E_INVALIDARG
cbSize в pRevStatus меньше, чем sizeof(CERT_REVOCATION_STATUS). Обратите внимание, что dwError в pRevStatus не обновляется для этой ошибки.

Комментарии

В следующем примере показано, как обновляется pRevStatus при обнаружении проблемы с проверкой отзыва:

Рассмотрим случай, когда cContext имеет значение 4:

Если CertVerifyRevocation может убедиться, что rgpvContext[0] и rgpvContext[1] не отозваны, но не может проверка rgpvContext[2], для элемента pRevStatusdwIndex задано значение two, что указывает на то, что контекст по индексу two имеет проблему, члену dwErrorpRevStatus присваивается значение CRYPT_E_NO_REVOCATION_CHECK, а возвращается значение FALSE.

Если обнаруживается, что rgpvContext[2] отозван, член dwIndexpRevStatus имеет значение two, а члену dwErrorpRevStatus — значение CRYPT_E_REVOKED, dwReason обновляется и возвращается значение FALSE .

В любом случае проверяется, что rgpvContext[0] и rgpvContext[1] не будут отозваны, rgpvContext[2] является последним проверенным индексом массива, а rgpvContext[3] вообще не проверялся.

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header wincrypt.h
Библиотека Crypt32.lib
DLL Crypt32.dll

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

CERT_CONTEXT

CERT_REVOCATION_PARA

CERT_REVOCATION_STATUS

CertVerifyCRLTimeValidity

CertVerifyTimeValidity

CertVerifyValidityNesting

Функции Управление данными