编程方式读取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证书所在的命名空间:

using Org.BouncyCastle.X509;

其中的几个有关的类:

X509CrlParser 用于构建一个crl对象,支持从字节数组和内存流中获取数据。

X509Crl crl对象,包含证书吊销组织、吊销证书列表、时间戳等信息。

X509CrlEntry crl对象中被吊销的证书对象。

ISet 在Org.BouncyCastle.Utilities.Collections下,X509Crl中被读取所有证书对象放在HashSet中,以ISet接口类型返回,HashSet支持迭代器。

下面是读取Crl的示例:

//获取obj
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。如果需要根据证书生成组织结构,这个需要特别注意。

© 2018 Silent River All Rights Reserved. 本站访客数人次 本站总访问量
Theme by hiero