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