CertVerifyCertificateChainPolicy 函数 (wincrypt.h)
CertVerifyCertificateChainPolicy 函数检查证书链以验证其有效性,包括其是否符合任何指定的有效性策略条件。
语法
BOOL CertVerifyCertificateChainPolicy(
[in] LPCSTR pszPolicyOID,
[in] PCCERT_CHAIN_CONTEXT pChainContext,
[in] PCERT_CHAIN_POLICY_PARA pPolicyPara,
[in, out] PCERT_CHAIN_POLICY_STATUS pPolicyStatus
);
参数
[in] pszPolicyOID
下表列出了当前的预定义验证链策略结构。
值 | 含义 |
---|---|
|
实现基链策略验证检查。 pPolicyPara 指向的 结构的 dwFlags 成员可以设置为更改默认策略检查行为。 |
|
实现 Authenticode 链策略验证检查。 pPolicyPara 指向的结构的 pvExtraPolicyPara 成员可以设置为指向AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA结构。
pPolicyStatus 指向的结构的 pvExtraPolicyStatus 成员可以设置为指向AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS结构。 |
|
实现验证码时间戳链策略验证检查。 pPolicyPara 指向的数据结构的 pvExtraPolicyPara 成员可以设置为指向AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA结构。
不使用 pPolicyStatus 指向的数据结构的 pvExtraPolicyStatus 成员,必须设置为 NULL |
|
实现 SSL 客户端/服务器链策略验证检查。 pPolicyPara 指向的数据结构中的 pvExtraPolicyPara 成员可以设置为指向使用其他策略条件初始化的SSL_EXTRA_CERT_CHAIN_POLICY_PARA结构。
注意 为了区分服务器和客户端授权证书,调用 CertGetCertificateChain 函数以获取链上下文时,应通过设置预期的用法来指定证书类型。 通过设置在 CertGetCertificateChain 函数的 pChainPara 输入参数中传递的 CERT_CHAIN_PARA 结构的 RequestedUsage 成员来设置预期使用情况。
|
|
实现基本约束链策略。 循环访问链中的所有证书,检查szOID_BASIC_CONSTRAINTS或szOID_BASIC_CONSTRAINTS2扩展。 如果两个扩展都不存在,则假定证书具有有效的策略。 否则,对于第一个证书元素,检查它是否与 pPolicyPara 参数指向的 CERT_CHAIN_POLICY_PARA 结构的 dwFlags 成员中指定的预期CA_FLAG或END_ENTITY_FLAG匹配。 如果两个或两个标志均未设置,则第一个元素可以是 CA 或END_ENTITY。 所有其他元素必须是 CA) (证书颁发机构 。 如果扩展中存在 PathLenConstraint,则会对其进行检查。
其余简单链中的第一个元素 (,即,用于对 CTL) 进行签名的证书被检查为END_ENTITY。 如果此验证失败, dwError 将设置为 TRUST_E_BASIC_CONSTRAINTS。 |
|
实现 Windows NT 身份验证链策略,该策略由三个不同的链验证组成,顺序如下:
|
|
检查 Microsoft 根公钥的第一个简单链的最后一个元素。 如果该元素不包含 Microsoft 根公钥,则 pPolicyStatus 参数指向的 CERT_CHAIN_POLICY_STATUS 结构的 dwError 成员将设置为 CERT_E_UNTRUSTEDROOT。
pPolicyStatus 参数指向的 CERT_CHAIN_POLICY_PARA 结构的 dwFlags 成员可以包含 MICROSOFT_ROOT_CERT_CHAIN_POLICY_CHECK_APPLICATION_ROOT_FLAG 标志,这会导致此函数改为为 Microsoft 应用程序根目录“Microsoft 根证书颁发机构 2011”检查。 pPolicyPara 参数指向的 CERT_CHAIN_POLICY_PARA 结构的 dwFlags 成员可以包含 MICROSOFT_ROOT_CERT_CHAIN_POLICY_ENABLE_TEST_ROOT_FLAG 标志,这会导致此函数也为 Microsoft 测试根检查。 注意 此策略 对象标识符 (OID) 本身不执行任何策略验证检查,旨在与其他策略结合使用。
|
|
指定执行证书的扩展验证。
Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP: 不支持此值。 |
|
检查链中的任何证书是否具有弱加密或第三方根证书合规性,并提供错误字符串。 pPolicyStatus 参数指向的 CERT_CHAIN_POLICY_STATUS 结构的 pvExtraPolicyStatus 成员必须指向 SSL_F12_EXTRA_CERT_CHAIN_POLICY_STATUS,该成员使用弱加密和根程序合规性检查的结果进行更新。
在调用之前,pPolicyStatus 参数指向的 CERT_CHAIN_POLICY_STATUS 结构的 cbSize 成员必须设置为大于或等于 size of (SSL_F12_EXTRA_CERT_CHAIN_POLICY_STATUS) 的值。 pPolicyStatus 参数指向的 CERT_CHAIN_POLICY_STATUS 结构中的 dwError 成员将设置为潜在弱加密的 TRUST_E_CERT_SIGNATURE,并设置为不符合 Microsoft 根计划的第三方根的 CERT_E_UNTRUSTEDROOT。 Windows 10版本 1607、Windows Server 2016、Windows 10、版本 1511(带 KB3172985)Windows 10 RTM(带 KB3163912、Windows 8.1 和 Windows Server 2012 R2 KB3163912)以及 Windows 7 SP1 和 Windows Server 2008 R2 SP1(带 KB3161029 |
[in] pChainContext
指向包含要验证 的链的CERT_CHAIN_CONTEXT 结构的指针。
[in] pPolicyPara
指向 CERT_CHAIN_POLICY_PARA 结构的指针,该结构为链提供策略验证条件。 可以将该结构的 dwFlags 成员设置为更改默认策略检查行为。
此外,还可以在 结构的 pvExtraPolicyPara 成员中传递特定于策略的参数。
[in, out] pPolicyStatus
指向 CERT_CHAIN_POLICY_STATUS 结构的指针,其中返回链上的状态信息。 可以在此结构的 pvExtraPolicyStatus 成员中返回特定于 OID 的额外状态。
返回值
返回值指示函数是否能够为策略检查,它并不指示策略检查失败或已通过。
如果可以为指定策略验证链,则返回 TRUE 并更新 pPolicyStatus 的 dwError 成员。 dwError 为 0 (ERROR_SUCCESS 或 S_OK) 表示链满足指定的策略。
如果无法验证链,则返回值为 TRUE ,并且需要验证 pPolicyStatus 参数是否存在实际错误。
值为 FALSE 表示函数无法为策略检查。
注解
pPolicyStatus 指向的 CERT_CHAIN_POLICY_STATUS 结构的 dwError 成员可以应用于单个链元素、简单链或整个链上下文。 如果 dwError 应用于整个链上下文,则 lChainIndex 和 CERT_CHAIN_POLICY_STATUS 结构的 lElementIndex 成员都设置为 –1。 如果 dwError 应用于完整的简单链, 则 lElementIndex 设置为 –1, lChainIndex 设置为具有错误的第一个链的索引。 如果 dwError 应用于单个证书元素, 则 lChainIndex 和 lElementIndex 将索引包含错误的第一个证书。
若要获取证书元素,请使用以下语法:
pChainContext->rgpChain[lChainIndex]->rgpElement[lElementIndex];
使用 CertGetCertificateChain 函数启用并执行证书吊销检查。 如果证书链中的证书被吊销,则 CertVerifyCertificateChainPolicy 函数不会检查。
要求
最低受支持的客户端 | Windows XP [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2003 [桌面应用 | UWP 应用] |
目标平台 | Windows |
标头 | wincrypt.h |
Library | Crypt32.lib |
DLL | Crypt32.dll |
另请参阅
AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA
AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈