[总结]Windows Crypto API 自动更新根证书问题原因及解决方案

简介: [总结]Windows Crypto API 自动更新根证书问题原因及解决方案

项目场景:

最近在使用Windows Crypto API 做验签,遇到的一些问题.


问题描述

在调用Windows Crypto API时 发现有网络请求(microsoft/DigiCert等网站)的流量


原因分析:

CertGetCertificateChain->CRYPT32!CChainPathObject::CChainPathObject()这个函数内会进行区分


问题结论

调用Windows Crypto API时存在自动更新根证书 自动访问特定网站下载证书行为.


解决方案:

CertGetCertificateChain function (wincrypt.h)

官网解释

dwFlag解释

Value Meaning
CERT_CHAIN_CACHE_END_CERT 0x00000001 当这个标志设置,最终证书缓存,这可能会加快正在建设的过程。
默认情况下,最终的证书是不缓存,它需要验证每次链构建。
CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY 0x80000000 吊销证书检查只访问缓存的url。
CERT_CHAIN_REVOCATION_CHECK_OCSP_CERT 0x04000000 这个标志内部使用在链构建一个在线证书状态协议(OCSP)签名者证书,以防止循环吊销证书检查。链建设期间,如果签署的OCSP反应是一个独立的OCSP签名者,然后,除了原来的链构建,还有第二个链构建OCSP签名者证书本身。这个标志这第二个链构建期间用于抑制递归独立OCSP签名者证书。如果签名者证书包含szOID_PKIX_OCSP_NOCHECK扩展,叶签名者证书吊销证书检查被跳过。OCSP和CRL检查都是允许的。
Windows Server 2003和Windows XP:不支持这个值。
CERT_CHAIN_CACHE_ONLY_URL_RETRIEVAL 0x00000004 只使用缓存的url在构建一个证书链,不会在互联网和内联网搜寻基于URL的对象 注意:这个标志不适用吊销证书检查。缓存设置CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY只使用url吊销证书检查。
CERT_CHAIN_DISABLE_PASS1_QUALITY_FILTERING 0x00000040
CERT_CHAIN_DISABLE_MY_PEER_TRUST 0x00000800 不支持这个标志。证书在“MY”证书存储从不考虑同伴的信任。
CERT_CHAIN_ENABLE_PEER_TRUST 0x00000400 在“TrustedPeople”证书存储的终端实体证书没有执行任何链构建都是可信任的。这个函数不设置CERT_TRUST_IS_PARTIAL_CHAIN或CERT_TRUST_IS_UNTRUSTED_ROOT dwErrorStatus ppChainContext参数的成员。
Windows Server 2003 Windows XP:不支持这个标志。
CERT_CHAIN_OPT_IN_WEAK_SIGNATURE 0x00010000 设置此标志显示调用者希望选择弱签名检查。   这个标志可以在每个操作系统的汇总更新从Windows 7和Windows Server 2008 R2 开始
CERT_CHAIN_RETURN_LOWER_QUALITY_CONTEXTS 0x00000080 默认是只返回最高质量链的道路。设置此标志将返回低质量链。这些返回的cLowerQualityChainContext和rgpLowerQualityChainContext字段链上下文。
CERT_CHAIN_DISABLE_AUTH_ROOT_AUTO_UPDATE 0x00000100 设置这个标志阻止第三方根证书的从Windows更新Web服务器的自动更新
CERT_CHAIN_REVOCATION_ACCUMULATIVE_TIMEOUT 0x08000000
CERT_CHAIN_TIMESTAMP_TIME 0x00000200 这个标志被设置时,pTime作为时间戳时间确定最终的证书是有效的。当前时间也可以用来确定最终证书仍然有效。所有其他认证机构(CA)和根证书链中使用当前时间而不是pTime检查。
CERT_CHAIN_DISABLE_AIA 0x00002000 设置这个标记显式地关闭 Authority Information Access (AIA)检索。

您还可以设置以下吊销标志,但只有一个标志从这组可以设置一次:

Value Meaning
CERT_CHAIN_REVOCATION_CHECK_END_CERT 0x10000000 吊销证书的检查在最终证书,也仅仅是对最终证书
CERT_CHAIN_REVOCATION_CHECK_CHAIN 0x20000000 吊销证书的检查在所有证书,且在每一个链。
CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT 0x40000000 吊销证书的检查在所有的所有证书链上进行,除了根证书。

END_CERT:终端实体证书/叶证书/SSL证书

解决方案

主要是在函数的dwFlag上处理

总结

参考:

不支持ISRG?在Windows 10/8.1/7中更新根证书列表

Windows下验证https证书

CryptoAPI System Architecture

相关文章
|
5月前
|
安全 Windows
安装MyEclipse遇到错误提示 Failed to find a Main Class in “C:Windows\Temp\“时的解决方案
安装MyEclipse遇到错误提示 Failed to find a Main Class in “C:Windows\Temp\“时的解决方案
71 1
|
2月前
|
存储 API
【Azure API 管理】APIM中证书更新问题
【Azure API 管理】APIM中证书更新问题
|
17天前
|
人工智能 运维 安全
聚焦API安全未来,F5打造无缝集成的解决方案
聚焦API安全未来,F5打造无缝集成的解决方案
66 26
|
7天前
|
网络协议 API Windows
MASM32编程调用 API函数RtlIpv6AddressToString,windows 10 容易,Windows 7 折腾
MASM32编程调用 API函数RtlIpv6AddressToString,windows 10 容易,Windows 7 折腾
|
9天前
|
小程序 前端开发 API
微信小程序 - 调用微信 API 回调函数内拿不到 this 问题(解决方案)
本文讨论了在微信小程序中调用API回调函数时无法获取到`this`上下文的问题,并提供了解决方案。在回调函数中,使用一个变量(如`that`)来保存当前的`this`引用,然后在回调内部使用这个变量来访问当前页面的数据和方法。
|
2月前
|
安全 API 网络安全
【Azure API 管理】APIM如何配置客户端证书的CRL检测策略
【Azure API 管理】APIM如何配置客户端证书的CRL检测策略
|
2月前
|
API
【Azure 应用服务】在App Service中调用外部服务API时需要携带客户端证书,而多次调用的情况下会出现WindowsCryptographicException Keyset does not exist异常
【Azure 应用服务】在App Service中调用外部服务API时需要携带客户端证书,而多次调用的情况下会出现WindowsCryptographicException Keyset does not exist异常
|
2月前
|
存储 安全 API
【Azure API 管理】在APIM中使用客户端证书验证API的请求,但是一直提示错误"No client certificate received."
【Azure API 管理】在APIM中使用客户端证书验证API的请求,但是一直提示错误"No client certificate received."
|
4月前
|
网络虚拟化 Windows
Windows 10 Windows1011出现0x80190001错误解决方案! Windows微软账户无法登录问题 Microsoft Store商店用不了
Windows 10 Windows1011出现0x80190001错误解决方案! Windows微软账户无法登录问题 Microsoft Store商店用不了
81 1
|
4月前
|
Python Windows
在 Windows 平台下打包 Python 多进程代码为 exe 文件的问题及解决方案
在使用 Python 进行多进程编程时,在 Windows 平台下可能会出现将代码打包为 exe 文件后无法正常运行的问题。这个问题主要是由于在 Windows 下创建新的进程需要复制父进程的内存空间,而 Python 多进程机制需要先完成父进程的初始化阶段后才能启动子进程,所以在这个过程中可能会出现错误。此外,由于没有显式导入 Python 解释器,也会导致 Python 解释器无法正常工作。为了解决这个问题,我们可以使用函数。
65 5
下一篇
无影云桌面