CertFindCRLInStore 函数 (wincrypt.h)

CertFindCRLInStore 函数在证书存储中查找第一个或下一个证书吊销列表 (CRL) 上下文,该上下文与 dwFindType 参数和关联的 pvFindPara 参数建立的搜索条件相匹配。 此函数可在循环中用于查找证书存储中与指定查找条件匹配的所有 CRL 上下文。

语法

PCCRL_CONTEXT CertFindCRLInStore(
  [in] HCERTSTORE    hCertStore,
  [in] DWORD         dwCertEncodingType,
  [in] DWORD         dwFindFlags,
  [in] DWORD         dwFindType,
  [in] const void    *pvFindPara,
  [in] PCCRL_CONTEXT pPrevCrlContext
);

参数

[in] hCertStore

要搜索的证书存储的句柄。

[in] dwCertEncodingType

当前未使用此参数。 它必须设置为零。

[in] dwFindFlags

如果 dwFindType CRL_FIND_ISSUED_BY,则默认情况下仅完成颁发者名称匹配。 以下标志可用于执行其他筛选。

含义
CRL_FIND_ISSUED_BY_AKI_FLAG
检查是否具有 AKI) 扩展 (颁发机构密钥标识符的 CRL。 如果 CRL 具有 AKI,则仅返回其 AKI 与颁发者匹配的 CRL。
注意 AKI 扩展具有 对象标识符 (OID) 值szOID_AUTHORITY_KEY_IDENTIFIER2及其相应的数据结构。
 
CRL_FIND_ISSUED_BY_SIGNATURE_FLAG
使用颁发者证书中的公钥验证 CRL 上的签名。 仅返回具有有效签名的 CRL。
CRL_FIND_ISSUED_BY_DELTA_FLAG
查找并返回增量 CRL。
CRL_FIND_ISSUED_BY_BASE_FLAG
查找并返回基本 CRL。
CRL_FIND_ISSUED_FOR_SET_STRONG_PROPERTIES_FLAG
成功验证后,将检查签名的强度。 仅当 dwFindType 参数设置为 CRL_FIND_ISSUED_FOR 时,此标志才适用。 还必须设置 CRL_FIND_ISSUED_BY_SIGNATURE_FLAG。 如果成功,将在 CRL 上下文中设置以下强签名属性:
  • CERT_SIGN_HASH_CNG_ALG_PROP_ID
  • CERT_ISSUER_PUB_KEY_BIT_LENGTH_PROP_ID
Windows 8和Windows Server 2012:开始支持此标志。

[in] dwFindType

指定要进行的搜索的类型。 dwFindType 的值确定 pvFindPara 参数的数据类型、内容和用法。 当前定义的搜索类型及其 pvFindPara 要求如下所示。

含义
CRL_FIND_ANY
不使用 pvFindPara 参数。 它必须设置为 NULL
无搜索条件。 将返回存储中的下一个 CRL。
CRL_FIND_ISSUED_BY
指向CERT_CONTEXT的指针。
在与 CERT_CONTEXT 中的颁发者匹配的存储中搜索下一个 CRL。
CRL_FIND_EXISTING
指向CRL_CONTEXT的指针。
通过以下方式搜索与 CRL_CONTEXT 匹配的下一个 CRL:
  • 两者都是基本 CRL 或增量 CRL。
  • 两者的颁发者名称 BLOB 相同。
  • 如果存在,则 Authority/KeyIdentifier 和 IssuingDistributionPoint 编码扩展 BLOB 匹配。
CRL_FIND_ISSUED_FOR
指向CRL_FIND_ISSUED_FOR_PARA的指针。
在存储区中搜索与CRL_FIND_ISSUED_FOR_PARA结构中的使用者证书颁发者匹配的下一个 CRL。

如果未找到 CRL,请在存储区中搜索与 CRL_FIND_ISSUED_FOR_PARA 结构中的颁发者匹配的下一个 CRL。

注意 使用交叉证书时,颁发者证书中的使用者名称可能与使用者证书及其相应的 CRL 中的颁发者名称不匹配。
 

[in] pvFindPara

此参数由 dwFindType 的值确定。 有关详细信息,请参阅本主题前面的表。

[in] pPrevCrlContext

指向此函数返回的最后 一个CRL_CONTEXT 的指针。 必须为 NULL 才能获取存储区中符合搜索条件的第一个 CRL。 通过将 pPrevCrlContext 设置为上一次调用函数返回 的PCCRL_CONTEXT 指针,可以找到满足搜索条件的连续 CRL。 搜索过程会跳过任何不符合搜索条件的 CRL,或者之前已由 CertDeleteCRLFromStore 从存储中删除的 CRL。 此函数释放由此参数的不为 NULL 的值引用的CRL_CONTEXT

返回值

如果函数成功,该函数将返回指向只读 CRL 上下文的指针。 使用完返回的 CRL 上下文后,通过调用 CertFreeCRLContext 函数来释放它,或通过在后续调用 CertFindCRLInStore 函数时将其作为 pPrevCrlContext 参数传递来隐式释放它。

如果函数失败,并且找不到与搜索条件匹配的 CRL,则返回值为 NULL。 有关扩展的错误信息,请调用 GetLastError。 下面是一些可能的错误代码。

返回代码 说明
E_INVALIDARG
hCertStore 参数中的句柄与 pPrevCrlContext 参数指向的 CRL 上下文中的句柄不同,或者在 dwFindType 参数中指定了无效的搜索类型。
CRYPT_E_NOT_FOUND
存储中没有 CRL,未找到与搜索条件匹配的 CRL,或者已到达商店列表的末尾。

注解

在对函数的后续调用中作为 pPrevCrlContext 参数传递时,返回的指针将被释放。 否则,必须通过调用 CertFreeCRLContext 显式释放指针。 CertFindCRLInStore 始终使用调用 CertFreeCRLContext 释放不为 NULLpPrevCrlContext,即使函数中存在错误也是如此。

可以调用 CertDuplicateCRLContext 来复制返回的上下文。 可以使用 CertAddCRLContextToStore 将返回的 CRL 上下文添加到不同的证书存储区,也可以使用 CertAddCRLLinkToStore 将指向该 CRL 上下文的链接添加到非集合存储。

要求

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

另请参阅

CRL_CONTEXT

CertAddCRLContextToStore

CertAddCRLLinkToStore

CertDeleteCRLFromStore

CertDuplicateCRLContext

CertFreeCRLContext

证书吊销列表函数