加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 17:21:37 所属栏目:百科 来源:网络整理
导读:我想验证证书链,我得到一个X509Certificate2集合,并且必须验证所有证书是否构建了一个链. 通常,为了验证证书链,我应该从叶证书中获取数字签名并检查它是否由根证书签名 – 但在.NET中我找不到从X509Certificate2对象中提取签名的方法. 因此,我想到了以下方式
我想验证证书链,我得到一个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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读