首页
社区
课程
招聘
[原创]编程方式读取X.509证书吊销列表(CRL)(一)应用Bouncy Castle Crypto
发表于: 2013-2-20 16:01 4168

[原创]编程方式读取X.509证书吊销列表(CRL)(一)应用Bouncy Castle Crypto

2013-2-20 16:01
4168
把以前写的文章放到看雪来.
    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的示例:

Code

[copy to clipboard]

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

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 6
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//