我想验证证书链,我获取了一个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);
}
但是我有一些关于build方法的问题:
- 据我所知,该链也是从我的计算机商店构建的,而我希望它只从
ExtraStore
中构建,我该如何定义这种行为? - 我看到在链构建之后它不包含根证书;我的问题是为什么,以及如何验证链是否具有根CA,因为这不是链元素的一部分。
如果有人能解释一下Build()
方法的工作原理,我会非常感激。