解析“证书策略”扩展

Dia*_*cus 1 c# certificate

我的X509Certificate2应用程序中有一个证书(),我可以枚举所有证书的扩展名。这些扩展之一是证书策略,其OID为2.5.29.32。该扩展名应该只是OID的序列,我需要在其中搜索特定的OID。问题在于此扩展名编码为DER八位位组字符串。如何获得我感兴趣的OID?我是否必须手动解析DER八位位组字符串?我怎样才能做到这一点?

编辑:我将看看Bouncy Castle必须提供什么,但是我想知道.NET框架中是否有现成的解决方案。框架会解析证书和其他DER结构,因此可能内置了DER解码器。

赏金:我为我找到了解决方案,但我正在寻求改进。如果赏金满足以下一项或多项(按相关性排序),则转到其他解决方案:

  1. 它使用标准的.NET库函数
  2. 它使用成熟或成熟的源代码或库,比Bouncy Castle小(我只需要解析,不需要其余所有)
  3. 在我认为值得的事情上,它只是改善了我已有的代码

爆炸:赏金今天到期。如果没有其他人提供答案,它将转到GalacticJello。

Kin*_*xit 5

我可以使用extension.Format()以下方式获取字符串表示形式:

foreach (X509Extension extension in certificate.Extensions)
{
    if(extension.Oid.FriendlyName.Equals("Certificate Policies"))
    {
        Console.WriteLine(extension.Format(true));
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到的输出看起来像这样:

[1]Certificate Policy:
    Policy Identifier=2.16.356.100.2.3
Run Code Online (Sandbox Code Playgroud)

这正是使用该certmgr.msc工具查看证书时出现的内容。这告诉我CCC印度定义的证书类别。例如,这是3类证书。