我想验证证书链,我得到一个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:

    10-08 15:03