数字证书链验证

     关于数字证书链的验证有很多文档,这里写一下我记录的文档。

     我们获取到一张证书文件,如pfx,cer后缀的文件,我们如何保证我们获取的证书是正式CA机构颁发的,并且有完整证书链,直到信任的根证书呢,下面就记录下一下C#代码来查询。

     在c#中有这个类型X509Certificate2,我们将用这个类型来判断证书的有效性,包括但不限于验证证书链是否完整、证书是否过期、证书是否可信任、证书是否被吊销等。

     

 1 X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
 2             store.Open(OpenFlags.ReadWrite);
 3             X509Certificate2Collection storecollection = (X509Certificate2Collection)store.Certificates;
 4             foreach (X509Certificate2 x509 in storecollection)
 5             {
 6                 //120B2FCE02360A4E36F25EC 过期证书
 7                 //4AB398545081D3A3496DF 自签名证书
 8                 //4DEF9C5D328130958EA823 正常证书
 9                 if (x509.SerialNumber == "4AB398545081D3A3496DFA0")
10                 {
11 
12                     bool isFullChain= x509.Verify();
13 
14 
15                     System.Security.Cryptography.X509Certificates.X509Certificate2 cert = x509;
16 
17                     System.Security.Cryptography.X509Certificates.X509Chain chain = new System.Security.Cryptography.X509Certificates.X509Chain();
18                     //chain.ChainPolicy.RevocationMode = System.Security.Cryptography.X509Certificates.X509RevocationMode.Online;
19                     //chain.ChainPolicy.RevocationFlag = System.Security.Cryptography.X509Certificates.X509RevocationFlag.EntireChain;
20                     //chain.ChainPolicy.VerificationFlags = X509VerificationFlags.NoFlag;
21                     ////chain.ChainPolicy.VerificationFlags = System.Security.Cryptography.X509Certificates.X509VerificationFlags.;
22                     //chain.ChainPolicy.VerificationTime = DateTime.Now;
23 
24                     bool sucess = chain.Build(cert);
25 
26                     if (!sucess)
27                     {
28                         string[] errors = chain.ChainStatus.Select(x => String.Format("{0} ({1})", x.StatusInformation.Trim(), x.Status)).ToArray();
29 
30                     }
31 
32 
33                     #endregion
34                 }
35             }

通过sucess可以判断证书是否完整有效,如果你还需要具体点错误信息,请查看errors错误内容。

一般提示:自签名的证书(已处理证书链,但是在不受信任提供程序信任的根证书中终止。 (UntrustedRoot))

过期证书(根据当前系统时钟或签名文件中的时间戳验证时要求的证书不在有效期内。 (NotTimeValid))

转载于:https://www.cnblogs.com/zuimengaitianya/p/6488904.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值