.NET 7下X509Chain在线吊销验证失败及自定义存储疑问
X509证书链验证吊销相关问题解答
先看你实现的证书链验证代码:
var chain = new X509Chain(); chain.ChainPolicy.TrustMode = X509ChainTrustMode.CustomRootTrust; chain.ChainPolicy.CustomTrustStore.Add(_options.CA); chain.ChainPolicy.CustomTrustStore.Add(_options.Intermediate);
针对你的两个疑问,结合.NET 7跨平台(Windows/Linux)的行为,解答如下:
1. CRL Next date过期是否会导致吊销验证失败?
是的,当RevocationMode设为Online或Offline(非NoCheck)时,如果CRL的Next Update时间早于当前UTC时间,会直接导致吊销验证失败。
CRL的Next Update字段定义了该CRL的有效截止时间,一旦超过这个时间,该CRL会被视为过期无效。.NET的X509链验证逻辑在检查吊销状态时,会先验证CRL本身的有效性(包括签名、有效期),只有有效的CRL才会被用来检查证书是否被吊销。你的CRL Next date在2018年1月,早已过期,所以非NoCheck模式下,链验证会因为CRL无效而失败。
2. 自定义根存储是否影响吊销验证?仅Windows系统存储支持吊销验证吗?
自定义根存储(CustomRootTrust模式)不会影响吊销验证的功能,且并非只有Windows系统存储支持吊销验证。
- 自定义存储的影响:使用自定义信任存储时,链验证仍会遵循证书中的CRL分发点(CDP)配置尝试获取CRL,只要CDP可访问、CRL有效(未过期、签名合法),就能完成吊销检查。但需要确保自定义存储中的根证书、中间证书的CDP配置正确,且程序有访问CDP URL的网络权限。
- 跨平台支持:.NET 7在Linux下依赖OpenSSL实现吊销验证,Windows下依赖系统CryptoAPI,两者都支持吊销检查。但Linux环境下需要注意:确保系统时间同步(CRL有效期依赖准确时间)、网络能访问CDP地址、OpenSSL版本支持对应的CRL格式(如DER/PEM)。
内容的提问来源于stack exchange,提问作者mslot
相关产品推荐
相关产品推荐

