[总结]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

相关文章
|
8月前
|
安全 Windows
安装MyEclipse遇到错误提示 Failed to find a Main Class in “C:Windows\Temp\“时的解决方案
安装MyEclipse遇到错误提示 Failed to find a Main Class in “C:Windows\Temp\“时的解决方案
113 1
|
3月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
193 3
|
23天前
|
机器学习/深度学习 人工智能 监控
API超越应用的时代,深入了解F5 API安全解决方案
API超越应用的时代,深入了解F5 API安全解决方案
32 3
|
5月前
|
存储 API
【Azure API 管理】APIM中证书更新问题
【Azure API 管理】APIM中证书更新问题
|
2月前
|
数据库 数据安全/隐私保护 Windows
Windows远程桌面出现CredSSP加密数据修正问题解决方案
【10月更文挑战第30天】本文介绍了两种解决Windows系统凭据分配问题的方法。方案一是通过组策略编辑器(gpedit.msc)启用“加密数据库修正”并将其保护级别设为“易受攻击”。方案二是通过注册表编辑器(regedit)在指定路径下创建或修改名为“AllowEncryptionOracle”的DWORD值,并将其数值设为2。
1045 3
|
3月前
|
开发框架 .NET API
Windows Forms应用程序中集成一个ASP.NET API服务
Windows Forms应用程序中集成一个ASP.NET API服务
113 9
|
4月前
|
人工智能 运维 安全
聚焦API安全未来,F5打造无缝集成的解决方案
聚焦API安全未来,F5打造无缝集成的解决方案
94 26
|
4月前
|
网络协议 API Windows
MASM32编程调用 API函数RtlIpv6AddressToString,windows 10 容易,Windows 7 折腾
MASM32编程调用 API函数RtlIpv6AddressToString,windows 10 容易,Windows 7 折腾
|
4月前
|
小程序 前端开发 API
微信小程序 - 调用微信 API 回调函数内拿不到 this 问题(解决方案)
本文讨论了在微信小程序中调用API回调函数时无法获取到`this`上下文的问题,并提供了解决方案。在回调函数中,使用一个变量(如`that`)来保存当前的`this`引用,然后在回调内部使用这个变量来访问当前页面的数据和方法。
|
5月前
|
安全 API 网络安全
【Azure API 管理】APIM如何配置客户端证书的CRL检测策略
【Azure API 管理】APIM如何配置客户端证书的CRL检测策略