编程方式读取X.509证书吊销列表(CRL)(一)应用Bouncy Castle Crypto
X.509 结构的证书被吊销后,序列号会出现在Certificate Revocation List (CRL) 中,我们可以将它另存为一个.crl的文件,就能够查看被吊销的证书信息,但.NET Framework并没有提供可对Crl进行属性访问的类(Java中提供了X509Crl),要实现这样的功能,我们得借助.NET框架之外的技术:Bouncy Castle Crypto或者Mono SDK。
先介绍如何使用Bouncy Castle Crypto(Version 1.4)读取X.509证书及吊销列表。
Bouncy Castle Crypto是一个开源的加/解密框架,下载地址:
http://www.bouncycastle.org/csharp/download/bccrypto-net-1.4-bin.zip
首先加入X.509证书所在的命名空间:
其中的几个有关的类:
X509CrlParser 用于构建一个crl对象,支持从字节数组和内存流中获取数据。
X509Crl crl对象,包含证书吊销组织、吊销证书列表、时间戳等信息。
X509CrlEntry crl对象中被吊销的证书对象。
ISet 在Org.BouncyCastle.Utilities.Collections下,X509Crl中被读取所有证书对象放在HashSet中,以ISet接口类型返回,HashSet支持迭代器。
下面是读取Crl的示例:
List<int> numbers = new List<int>();
X509CrlParser parser = new X509CrlParser();
X509Crl crl = parser.ReadCrl((byte[])obj);
//获取所有的吊销证书
ISet crlSet = crl.GetRevokedCertificates();
if (crlSet != null && crlSet.Count > 0)
{
foreach (object o in crlSet)
{
X509CrlEntry crlEntry = (X509CrlEntry)o;
int serialNumber = crlEntry.SerialNumber.IntValue;
if (!numbers.Contains(serialNumber))
{
numbers.Add(serialNumber);
}
}
}
X509CrlEntry.SerialNumber.IntValue将16进制的证书序列号以10进制的Int32类型输出。
另外再提一下BC Crypto的X509Certificate类和.NET Framework下的X509Certificate2类的区别:
X509Certificate2输出证书DN信息时,属性SubjectName是将个人信息按照从小到大(姓名-组织-市-省-国家)排列,而BC Crypto的X509Certificate使用SubjectDN属性,将个人信息从大到小排列,市的标识是ST,.NET是S。如果需要根据证书生成组织结构,这个需要特别注意。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?