Ted*_*ord 4 c# x509certificate2 x509
我正在寻找一种从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));
Run Code Online (Sandbox Code Playgroud)
对于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
Run Code Online (Sandbox Code Playgroud)
解析当然不容易,但是你可以查找以正则表达式开头的行,\[\d+\]Authority Info Access然后在正则表达式下面找到一行URL=(.+)(格式化中不清楚八个空格)并使用带括号的组中的URL.