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 查找吊销服务器。 此信息通常会在 PKIX 第 1 部分的 Internet 工程任务组 (IETF) 定义的 CRLDistributionsPoints 扩展等扩展中传达。

为了提高效率,一次传入的上下文越多越好。

[in] dwFlags

指示任何特殊处理需求。 此参数可以是以下标志之一。

含义
CERT_VERIFY_REV_CHAIN_FLAG
假设每个证书(第一个证书除外)是其前面的证书的颁发者,则对证书链进行验证。 如果未CERT_CONTEXT_REVOCATION_TYPE dwRevType ,则不会对上下文的顺序做出任何假设。
CERT_VERIFY_CACHE_ONLY_BASED_REVOCATION
阻止吊销处理程序访问任何基于网络的资源进行吊销检查。
CERT_VERIFY_REV_ACCUMULATIVE_TIMEOUT_FLAG
设置后, dwUrlRetrievalTimeout 是所有 URL 线路检索中的累积超时。
CERT_VERIFY_REV_SERVER_OCSP_FLAG
设置后,此函数仅使用 联机证书状态协议 (OCSP) 进行吊销检查。 如果证书没有任何 OCSP AIA URL,则 pRevStatus 参数的 dwError 成员设置为CRYPT_E_NOT_IN_REVOCATION_DATABASE。

[in, optional] pRevPara

(可选)设置为帮助查找颁发者。 有关详细信息,请参阅 CERT_REVOCATION_PARA 结构。

[in, out] pRevStatus

在调用 CertVerifyRevocation 之前,只需设置 pRevStatus 指向的CERT_REVOCATION_STATUScbSize 成员。

如果函数返回 FALSE,则此结构的成员将包含错误状态信息。 有关详细信息,请参阅 CERT_REVOCATION_STATUS。 有关遇到吊销验证问题时 pRevStatus 如何更新的说明,请参阅备注。

返回值

如果函数成功检查所有上下文且未撤销任何上下文,则函数返回 TRUE。 如果函数失败,它将返回 FALSE,并更新 pRevStatus 指向的 CERT_REVOCATION_STATUS 结构,如 CERT_REVOCATION_STATUS 中所述。

当任何上下文的吊销处理程序由于错误而返回 FALSE 时,处理程序将设置 pRevStatus 指向的结构中的 dwError 成员,以指定遇到哪个错误。 GetLastError 返回的错误代码等于在 CERT_REVOCATION_STATUS 结构的 dwError 成员中指定的错误。 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
上下文已被撤销。 pRevStatus 中的 dwReason 包含吊销的原因。
ERROR_SUCCESS
上下文很好。
E_INVALIDARG
pRevStatus 中的 cbSize 小于 sizeof (CERT_REVOCATION_STATUS) 。 请注意,pRevStatus 中的 dwError 不会针对此错误进行更新。

注解

以下示例演示在遇到吊销验证问题时如何更新 pRevStatus

请考虑 cContext 为 4 的情况:

如果 CertVerifyRevocation 可以验证 rgpvContext[0] 和 rgpvContext[1] 未撤销,但不能检查 rgpvContext[2],则 pRevStatus 成员 dwIndex 设置为 2,指示索引二处的上下文有问题,pRevStatusdwError 成员设置为 CRYPT_E_NO_REVOCATION_CHECK,返回 FALSE

如果发现 rgpvContext[2] 被撤销,pRevStatusdwIndex 成员设置为 2,pRevStatus 的 dwError 成员设置为 CRYPT_E_REVOKED,dwReason 将更新,返回 FALSE

在任一情况下, rgpvContext[0] 和 rgpvContext[1] 都验证为未撤销, rgpvContext[2] 是最后一个检查的数组索引,而 rgpvContext[3] 根本没有检查。

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 wincrypt.h
Library Crypt32.lib
DLL Crypt32.dll

另请参阅

CERT_CONTEXT

CERT_REVOCATION_PARA

CERT_REVOCATION_STATUS

CertVerifyCRLTimeValidity

CertVerifyTimeValidity

CertVerifyValidityNesting

数据管理函数