我想验证证书链,我得到了X509Certificate2
集合并必须验证所有证书是否构建一条链。
通常,为了验证证书链,我应该从叶证书中获取数字签名并检查它是否由根证书签名 -but在.NET中我找不到从X509Certificate2
目的。
因此,我想到使用X509Chain.Build()
方法如下:
void ValidateChain(X509Certificate2Collection collection, X509Certificate2 leaf)
{
X509Chain x509Chain = new X509Chain();
x509Chain.ChainPolicy.ExtraStore.AddRange(collection);
bool isValid = x509Chain.Build(leaf);
}
但我对构建方法有一些疑问:
- 据我了解,该连锁店也是从我的电脑商店建立的,我希望它仅是从
ExtraStore
,我如何定义这种行为?
- 我看到链建立后它不包含根证书;我的问题是why,以及如何验证链是否具有根 CA,因为这不是链元素的一部分。
如果有人能向我解释如何Build()
方法有效。
您应该在构建操作后使用 ChainStatus 值。 MSDN 参考here https://learn.microsoft.com/en-us/dotnet/api/system.security.cryptography.x509certificates.x509chain?view=net-5.0:
X509Chain 对象有一个名为 ChainStatus 的全局错误状态,应用于证书验证。管理证书验证的规则很复杂,并且很容易通过忽略所涉及的一个或多个元素的错误状态来过度简化验证逻辑。全局错误状态考虑了链中每个元素的状态。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)