如何验证数字证书的有效性 信息安全

发布网友 发布时间:2022-04-20 12:38

我来回答

1个回答

热心网友 时间:2022-05-18 08:53

  一、有效期
  证书的有效期验证这个比较简单,就是使用时间在必须在证书起始和结束日期之间才有效,通过解析X.509对象很容易获取起止时间,判断证书有效期代码如下:
  /// <summary>
/// 有效期验证
/// </summary>
/// <param name="cert"></param>
/// <returns></returns>
public static bool CheckDate(string cert)
{
byte[] bt = Convert.FromBase64String(cert);
System.Security.Cryptography.X509Certificates.X509Certificate2 x509
= new System.Security.Cryptography.X509Certificates.X509Certificate2(bt);

string date = x509.GetExpirationDateString();
DateTime dtex = Convert.ToDateTime(date);
DateTime dtnow = DateTime.Now;
DateTime dteff = Convert.ToDateTime(x509.GetEffectiveDateString());

if (dteff < dtnow && dtnow < dtex)
{
return true;
}

return false;
}
  二、颁发根证书
  每个数字证书都有颁发根证书的签名,验证证书就是用根证书公钥来验证证书颁发者签名。首先,必须要找到数字证书的颁发根证书,Windows本身集成一些权威的受信任的根证书颁发机构,如VeriSign等,如果不在受信任的证书列表,我们打开证书会显示“Windows 没有足够信息,不能验证该证书”,当然我们可以把根证书加到受信任的根证书列表,这样证书就可以显示正常。
  一般带证书链的数字证书中会包含证书颁发机构颁发者,逐级验证到最顶级根证书,每一级都用上级颁发根证书验证证书签名,直到证书颁发者和使用者一样自己可以验证自己通过。根证书的基本约束会不一样,Subject Type=CA代表可以签发证书,而一般的用户证书为Subject Type=End Entity,为终端实体不能再签发证书。
  三、CRL验证
  CRL是经CA签名的证书作废列表,用于做证书冻结和撤销时对证书有效性状态控制。一般数字证书中都有 CRL分发点地址,提供了HTTP和LDAP方式访问。通过BouncyCastle库解析X509证书的扩展项我们可以获取到CRL地址,然后使用相应方式下载CRL进行验证。
  获取数字证书CRL

  在用LDAP方式下载CRL时,注意LDAP协议名称要大写,不然访问会出错。下载的CRL格式可能是BASE64编码的,需要判断转换成DER编码二进制格式。
  CRL分全量CRL和增量CRL,另外还有分段CRL,即同个CA的证书分不同的CRL地址段,主要是为了分流服务器负载。CRL有生效日期和下次更新时间,一般是定时更新,所以CRL并不是即时状态的。因此还有OCSP在线证书状态协议,可以即时的查询证书状态。
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com