c# – X509Chain.Build()方法说明

我想验证证书链,我得到一个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()方法是如何工作的,我将非常感激.

最佳答案 您应该在Build操作之后使用ChainStatus值. MSDN:

The X509Chain object has a global error status called ChainStatus that should be used for certificate validation. The rules governing certificate validation are complex, and it is easy to oversimplify the validation logic by ignoring the error status of one or more of the elements involved. The global error status takes into consideration the status of each element in the chain.

点赞