本文主要是介绍数字证书的有效性验证,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近在做数字证书有效性验证的接口,主要是从数字证书的有效期、颁发根证书和CRL进行验证,下面我就从这几个方面来说数字证书的有效性验证。
一、有效期
证书的有效期验证这个比较简单,就是使用时间在必须在证书起始和结束日期之间才有效,通过解析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进行验证。
获取数字证书CRL1/**//// <summary> 2 /// 获取X.509证书中的CRL地址 3 /// </summary> 4 /// <param name="cert"></param> 5 /// <returns> 6 /// CRL路径(先返回http格式路径,然后再是ldap) 7 /// </returns> 8 public static string GetCrlPath(string cert) 9 ...{ 10 string crl = string
这篇关于数字证书的有效性验证的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!