• 数字证书链验证


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

         我们获取到一张证书文件,如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))

  • 相关阅读:
    Windows下Android开发环境搭建
    解决Win7下打开或关闭Windows功能空白一片
    C#中得到程序当前工作目录和执行目录的一些方法
    创业者必看的小故事
    Sql Server 2005外围应用应用配置器打不开了怎么办
    vs2005无法Web调试
    SQL Server 全局变量
    转 document.documentElement与document.body
    [转]使用SSMA将Oracle数据库转成SQL Server 2008
    Delphi 2009、C++Builder2009正式发布
  • 原文地址:https://www.cnblogs.com/zuimengaitianya/p/6488904.html
Copyright © 2020-2023  润新知