首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WinVerifyTrust返回CERT_E_CHAINING

WinVerifyTrust返回CERT_E_CHAINING
EN

Stack Overflow用户
提问于 2011-11-16 23:32:00
回答 1查看 3.9K关注 0票数 1

一些用户报告说,Desura (我开发的程序)将不会启动,因为服务在尝试验证代码签名证书时返回错误代码CERT_E_CHAINING。

Msdn将此报告为:未正确创建证书链。

我似乎不知道这是什么原因,或者这个错误意味着什么。有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2011-11-17 16:27:23

在MSDN上的WinVerifyTrust文档中,您可以阅读

对于证书验证,请使用CertGetCertificateChain和CertVerifyCertificateChainPolicy函数。

问题是,如果需要验证一个证书是否允许进行代码签名,那么就应该完成相当多的工作。首先,证书本身必须有效,并且必须具有szOID_PKIX_KP_CODE_SIGNING ("1.3.6.1.5.5.7.3.3")。另外,它的父级和父级应该是可以的。例如,如果父服务器在增强的密钥使用中只有szOID_PKIX_KP_CLIENT_AUTH ("1.3.6.1.5.5.7.3.2"),或者如果重新定位了来自父证书的证书,则您试图验证的证书将无效。因此,这条链必须被建造,而这条链必须被验证。

许多有趣的替代可以发生。例如,可以是父证书中的一个现在过期了。另一方面,证书通常不仅签名,而且使用时间冲压。因此,可以验证作为颁发者的根证书现在已过期,但根证书在颁发子证书时仍然有效。如果签署子证书的时间被相应的时间签名所证明,并且所颁发的证书尚未过期,则子证书将有效。我希望这个例子不要太复杂。我只想证明,不仅要对链中的每个证书进行验证,而且要验证整个链。很抱歉这么长时间的解释。

我猜想,WinVerifyTrust在某种程度上在内部使用CertGetCertificateChainCertVerifyCertificateChainPolicy函数,但具体使用哪些参数还不清楚。许多事情取决于您使用的WINTRUST_DATA参数。

无论如何,错误CERT_E_CHAINING可能来自CertGetCertificateChainCertVerifyCertificateChainPolicy或内部使用的任何其他API。例如,它可以来自状态状态字段,用作CertVerifyCertificateChainPolicypPolicyStatus参数。

您编写了“一些用户正在报告”错误,因此可能是用户试图以错误的方式使用您的应用程序,或者某些证书安装错误。例如,如果一个导出证书可以与没有父证书的父证书一起使用。如果有一个没有父级的导出证书,那么导入的证书的验证就会更加复杂。在某些情况下,根证书可以根据子证书的URL下载,但在其他情况下则是不可能的。如果无法找到或下载父证书或父证书的父证书,则将出现CERT_E_CHAINING错误。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8160240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档