Функция 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
Указывает на любые особые потребности в обработке. Этот параметр может быть одним из следующих флагов.
Значение | Значение |
---|---|
|
Проверка цепочки сертификатов выполняется при условии, что каждый сертификат, кроме первого, является издателем сертификата, предшествующего ему. Если параметр dwRevType не является CERT_CONTEXT_REVOCATION_TYPE, предположения о порядке контекстов не делаются. |
|
Запрещает обработчику отзыва доступ к сетевым ресурсам для проверки отзыва. |
|
Если этот параметр задан, dwUrlRetrievalTimeout — это совокупное время ожидания для всех извлекаемых URL-адресов. |
|
Если этот параметр задан, эта функция использует только протокол 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 может иметь одно из следующих значений.
Значение | Описание |
---|---|
|
Установленная или зарегистрированная функция отзыва не смогла выполнить проверка отзыва контекста. |
|
Не найдена установленная или зарегистрированная библиотека DLL, которая смогла проверить отзыв. |
|
Контекст для проверки не найден в базе данных сервера отзыва. |
|
Невозможно подключиться к серверу отзыва. |
|
Контекст был отозван. DwReason в pRevStatus содержит причину отзыва. |
|
Контекст был хорошим. |
|
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 |