如何从.NET中的X509Certificate2中提取AuthorityKeyIdentifier

时间:2012-08-27 19:04:26

标签: c# x509 x509certificate2

我正在寻找一种从X509Certificate2实例中提取AuthorityKeyIdentifier扩展的方法。我没有看到任何内置支持,但由于Windows可以正确构建证书链,我知道功能必须存在于某种程度。如果答案是推送DER解析器,是否有可以引用的良好实现?

2 个答案:

答案 0 :(得分:9)

遍历X509Certificate2.Extensions属性中的扩展,并查找OID为2.5.29.35的扩展(根据http://www.alvestrand.no/objectid/2.5.29.35.html)。这是AuthorityKeyIdentifier扩展。

[编辑:添加以下内容。]

Extensions属性的每个成员都是ASN编码的。因此,您可以执行以下操作,以便以人类可读或机器可解析的格式获取它:

using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;

...

X509Extension extension; // The OID 2.5.29.35 extension
AsnEncodedData asndata = new AsnEncodedData(extension.Oid, extension.RawData);
Console.WriteLine(asndata.Format(true));

对于Microsoft中间CA证书之一,Format()方法返回以下内容:

[1]Authority Info Access
     Access Method=Certification Authority Issuer (1.3.6.1.5.5.7.48.2)
     Alternative Name:
          URL=http://www.microsoft.com/pki/certs/MicrosoftRootCert.crt

解析当然不容易,但你可以查找以正则表达式\[\d+\]Authority Info Access开头的行,然后在正则表达式URL=(.+)下面找到一行(八个空格不清楚格式化)并使用带括号的组中的URL。

答案 1 :(得分:0)

有一个更简单的选项 - 采用一些现有组件,可以更灵活地处理证书。您可以使用BouncyCastle或我们的SecureBlackbox