我想验证证书链,我得到一个X509Certificate2
集合,并且必须验证所有证书是否都构建一个链。
通常,为了验证证书链,我应该从叶证书中获取数字签名并检查它是否由根证书签名 -但在 .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
,我该如何定义这种行为? - 我看到链构建后它不包含根证书;我的问题是为什么,以及如何验证链是否具有根 CA,因为这不是链元素的一部分。
如果有人可以向我解释该Build()
方法的工作原理,我将不胜感激。