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_CONTEXT_REVOCATION_TYPE dwRevType ,则不会对上下文的顺序做出任何假设。 |
|
阻止吊销处理程序访问任何基于网络的资源进行吊销检查。 |
|
设置后, dwUrlRetrievalTimeout 是所有 URL 线路检索中的累积超时。 |
|
设置后,此函数仅使用 联机证书状态协议 (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_STATUS的 cbSize 成员。
如果函数返回 FALSE,则此结构的成员将包含错误状态信息。 有关详细信息,请参阅 CERT_REVOCATION_STATUS。 有关遇到吊销验证问题时 pRevStatus 如何更新的说明,请参阅备注。
返回值
如果函数成功检查所有上下文且未撤销任何上下文,则函数返回 TRUE。 如果函数失败,它将返回 FALSE,并更新 pRevStatus 指向的 CERT_REVOCATION_STATUS 结构,如 CERT_REVOCATION_STATUS 中所述。
当任何上下文的吊销处理程序由于错误而返回 FALSE 时,处理程序将设置 pRevStatus 指向的结构中的 dwError 成员,以指定遇到哪个错误。 GetLastError 返回的错误代码等于在 CERT_REVOCATION_STATUS 结构的 dwError 成员中指定的错误。 GetLastError 可以是以下值之一。
值 | 说明 |
---|---|
|
已安装或已注册的吊销函数无法对上下文执行吊销检查。 |
|
找不到能够验证吊销的已安装或已注册的 DLL。 |
|
在吊销服务器的数据库中找不到要检查的上下文。 |
|
无法连接到吊销服务器。 |
|
上下文已被撤销。 pRevStatus 中的 dwReason 包含吊销的原因。 |
|
上下文很好。 |
|
pRevStatus 中的 cbSize 小于 sizeof (CERT_REVOCATION_STATUS) 。 请注意,pRevStatus 中的 dwError 不会针对此错误进行更新。 |
注解
以下示例演示在遇到吊销验证问题时如何更新 pRevStatus :
请考虑 cContext 为 4 的情况:
如果 CertVerifyRevocation 可以验证 rgpvContext[0] 和 rgpvContext[1] 未撤销,但不能检查 rgpvContext[2],则 pRevStatus 成员 dwIndex 设置为 2,指示索引二处的上下文有问题,pRevStatus 的 dwError 成员设置为 CRYPT_E_NO_REVOCATION_CHECK,返回 FALSE。
如果发现 rgpvContext[2] 被撤销,pRevStatus 的 dwIndex 成员设置为 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 |