我正在寻找一种从X509Certificate2实例中提取AuthorityKeyIdentifier扩展的方法。 我没有看到任何内置支持,但由于Windows可以正确构建证书链,我知道该功能必须存在于某个级别上。 如果答案是要使用DER解析器,则是否有一个好的实现可以参考?
我正在寻找一种从X509Certificate2实例中提取AuthorityKeyIdentifier扩展的方法。 我没有看到任何内置支持,但由于Windows可以正确构建证书链,我知道该功能必须存在于某个级别上。 如果答案是要使用DER解析器,则是否有一个好的实现可以参考?
遍历 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));
对于微软中间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。
有一个更简单的选择 - 使用一些现有的组件来提供更灵活的证书处理。您可以使用BouncyCastle或我们的SecureBlackbox。