CryptVerifyCertificateSignatureEx 函数 (wincrypt.h)
CryptVerifyCertificateSignatureEx 函数使用颁发者的公钥验证使用者证书、证书吊销列表、证书请求或 keygen 请求的签名。 函数不需要访问 私钥。
语法
BOOL CryptVerifyCertificateSignatureEx(
[in] HCRYPTPROV_LEGACY hCryptProv,
[in] DWORD dwCertEncodingType,
[in] DWORD dwSubjectType,
[in] void *pvSubject,
[in] DWORD dwIssuerType,
[in] void *pvIssuer,
[in] DWORD dwFlags,
[in, out, optional] void *pvExtra
);
参数
[in] hCryptProv
此参数未使用,应设置为 NULL。
Windows Server 2003 和 Windows XP: 用于验证签名的 加密服务提供程序 的句柄。此参数的数据类型为 HCRYPTPROV。
除非有充分的理由传入特定的加密提供程序,否则将传递 NULL。 传入 NULL 会导致获取默认 RSA 或 DSS 提供程序。
[in] dwCertEncodingType
用于加密使用者的 证书编码类型 。 此函数将忽略包含在此值的高 WORD 中的消息编码类型标识符。
此参数可以是以下当前定义的证书编码类型。
值 | 含义 |
---|---|
|
指定 X.509 证书编码。 |
[in] dwSubjectType
主题类型。 此参数可以是以下主题类型之一。
值 | 含义 |
---|---|
|
pvSubject 是指向 CRYPT_DATA_BLOB 结构的指针。 |
|
pvSubject 是指向 CCERT_CONTEXT 结构的指针。 |
|
pvSubject 是指向 CCRL_CONTEXT 结构的指针。 |
|
pvSubject 是指向 OCSP_BASIC_SIGNED_RESPONSE_INFO 结构的指针。
Windows Server 2003 和 Windows XP: 不支持此主题类型。 |
[in] pvSubject
指向由 dwSubjectType 指示的类型的结构的指针,该类型包含要验证的签名。
[in] dwIssuerType
颁发者类型。 此参数可以是以下颁发者类型之一。
值 | 含义 |
---|---|
|
pvIssuer 是指向 CERT_PUBLIC_KEY_INFO 结构的指针。 |
|
pvIssuer 是指向 CCERT_CONTEXT 结构的指针。 |
|
pvIssuer 是指向 CCERT_CHAIN_CONTEXT 结构的指针。 |
|
pvIssuer 必须为 NULL。 |
[in] pvIssuer
指向 由 dwIssuerType 的值指示的类型结构的指针。 结构包含对验证签名所需的公钥的访问权限。
[in] dwFlags
修改函数行为的标志。 这可以是零,也可以是以下值的按位 OR 。
值 | 含义 |
---|---|
|
如果设置了此标志,并且 CryptVerifyCertificateSignatureEx 检测到 MD2 或 MD4 算法,则函数返回 FALSE 并将 GetLastError 设置为 NTE_BAD_ALGID。 签名仍会得到验证,但这种错误组合使调用方(现在知道使用了 MD2 或 MD4 算法)能够决定是信任还是拒绝签名。
Windows 8 和 Windows Server 2012: 开始支持此标志。 |
|
成功验证后,针对 pvSubject 参数指向的主题设置强签名属性。
在证书上下文中设置以下属性:
注意仅当在 dwSubjectType 参数中指定了 CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL 时,此标志才适用。
|
|
返回指向 pvExtra 参数中CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO结构的指针。 结构包含公钥的长度(以位为单位)以及所使用的签名和哈希算法的名称。
必须调用 CryptMemFree 才能释放结构。 如果无法为 CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO 结构分配内存,此函数将成功返回,但将 pvExtra 参数设置为 NULL。 注意仅当在 dwSubjectType 参数中指定了 CRYPT_VERIFY_CERT_SIGN_SUBJECT_OCSP_BASIC_SIGNED_RESPONSE 时,此标志才适用。
|
[in, out, optional] pvExtra
如果 dwFlags 参数设置为 CRYPT_VERIFY_CERT_SIGN_RETURN_STRONG_PROPERTIES_FLAG,则指向 CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO 结构的指针。
必须调用 CryptMemFree 才能释放结构。
返回值
如果成功,则返回非零值,否则返回零。
有关扩展的错误信息,请调用 GetLastError。
返回代码 | 说明 |
---|---|
|
证书编码类型无效。 目前仅支持 X509_ASN_ENCODING 。 |
|
签名算法的对象 标识符 (OID) 不映射到已知或支持的 哈希 算法。 |
|
签名无效。 |
如果函数失败, GetLastError 可能会返回 抽象语法表示法 One (ASN.1) 编码/解码错误。 有关这些错误的信息,请参阅 ASN.1 编码/解码返回值。
注解
使用者缓冲区可以包含已编码 的 BLOB 或证书或 CRL 的上下文。 对于 证书上下文,如果缺少证书的公钥参数,并且这些参数可以从证书的颁发者继承,例如从 DSS 公钥参数继承,则上下文的 CERT_PUBKEY_ALG_PARA_PROP_ID 属性将更新为颁发者的公钥算法参数,以获取有效的签名。
要求
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | wincrypt.h |
Library | Crypt32.lib |
DLL | Crypt32.dll |