5

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

4

2 回答 2

13

遍历 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。

于 2012-08-31T12:25:23.767 回答
-1

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

于 2012-08-27T19:50:27.140 回答