[New - Windows NT]
WinTrustSubjectCheckContentInfo功能验证指定的证书是否充分表示指定主题的内容。
BOOL WinTrustSubjectCheckContentInfo(
LPWIN_TRUST_SIP_SUBJECT 【lpSubject】, | //指向主题描述的指针 |
LPWIN_CERTIFICATE 【lpSignedData】 | //指向主题的证书的指针 |
); |
参数
【lpSubject】
指向WIN_TRUST_SIP_SUBJECT结构的指针,描述要与证书进行比较的主题。
【lpSignedData】
指向WIN_CERT_TYPE_PKCS_SIGNED_DATA类型的WIN_CERTIFICATE结构。此结构的bCertificate成员中的数据采用PKCS#7签名数据结构的格式。有关此数据格式的详细信息,请参见RSA Data Security,Inc.发布的【公钥加密标准(PKCS)】
SIP可以使用来自该PKCS#7结构的ContentInfo成员的信息来确定关于主题必须被验证的内容。例如,便携式执行(PE)图像可以包括图像的摘要中的资源信息和调试信息。如果是这样,SIP可以在相应的PKCS#7签名数据结构的ContentInfo成员中找到该信息。SIP不应该依赖于ContentInfo成员以外的PKCS#7结构的内容。
返回值
如果【lpSignedData】中的信息充分表示主题,则返回值不为零。否则返回值为零。
备注
信任提供者调用WinTrustSubjectCheckContentInfo函数来验证证书中的签名是否与指定主题的内容匹配。信任提供者调用该函数的WinTrust实现。WinTrust然后调用WinTrustSubjectCheckContentInfo相应主题界面包(SIP)的实现。适当的SIP是注册用于处理由【lpSubject】参数指定的主题类型的SIP。
要验证签名,信任提供商首先调用WinTrustSubjectEnumCertificates函数来枚举主题中包含的证书类型。接下来,信任提供者调用WinTrustSubjectGetCertificate函数来获取验证主题所需的证书。通常,这是一个包含来自主题的PKCS#7签名数据结构的证书。然后,信任提供商调用WinTrustSubjectCheckContentInfo来确定PKCS#7签名数据结构的ContentInfo成员是否与主题相匹配。如果返回值表示SIP已经验证了ContentInfo成员,则信任提供者还必须检查PKCS#7签名数据结构的签名。为此,信任提供者必须消化PKCS结构并将其与该结构中的签名值进行比较。
每个主题界面包(SIP)DLL必须实现WinTrustSubjectCheckContentInfo功能。当WinTrust调用SIP的WinTrustSipInitialize初始化功能时,WinTrust获取指向SIP的WinTrustSubjectCheckContentInfo实现的指针。
WinTrustSubjectCheckContentInfo的SIP实现将PKCS#7的ContentInfo成员中的信息与从【lpSubject】参数标识的主题检索到的信息进行比较。为此,SIP从主题生成新的ContentInfo信息,然后将其与PKCS#7签署数据结构的ContentInfo成员进行比较。ContentInfo成员包含对主体的消息摘要,这对验证主题的有效性非常重要。请注意,ContentInfo成员中的其他信息可能与主题不符。例如,文件的名称不重要,因为名称可以更改而不影响主题的完整性。
LPWINTRUST_SUBJECT_CHECK_CONTENT_INFO类型是指向WinTrustSubjectCheckContentInfo函数的指针。
也可以看看
WIN_CERTIFICATE, WIN_TRUST_SIP_SUBJECT, WinTrustSipInitialize, WinTrustSubjectEnumCertificates, WinTrustSubjectGetCertificate