在 c# 中添加证书 ocsp 授权信息访问和策略扩展

Add Certificate ocsp Authority Information Access and policies extensions in c#

我正在(通过自己的证书颁发机构)颁发 C# 代码证书(基于

在 CertificateRequest 中,无法添加证书 ocsp 授权信息访问(oid:1.3.6.1.5.5.7.1.1)和证书策略(oid:2.5.29.32)扩展(类似结果: Authority Information Access extension)

我不想使用外部库,如果需要的话可能只使用 ASN1 库。

任何人都可以帮助使用 c# 代码来添加这些扩展,因为我在 .Net 中没有找到任何合适的类型?

certificateRequestObject.CertificateExtensions.Add(
                  new X509Extension("2.5.29.32", **[Authority Information Access text] to RawData?** , false));

[权限信息访问文本]

Authority Information Access   1.3.6.1.5.5.7.1.1
[1]Authority Info Access
     Access Method=On-line Certificate Status Protocol (1.3.6.1.5.5.7.48.1)
     Alternative Name:
          URL=example.org
[2]Authority Info Access
     Access Method=Certification Authority Issuer (1.3.6.1.5.5.7.48.2)
     Alternative Name:
          URL=example.org

免责声明:我坚信您不应该推出自己的 crypto/CA 并使用标准 CA 软件来颁发证书,因为它们旨在解决此问题。


.NET(包括 .NET Core)中没有对 ASN encoding/decoding 的内置支持,您必须使用第 3 方库。

对于 ASN 编码,您可以使用我开发的 ASN.1 库:Asn1DerParser.NET

针对您的特定情况的使用将是:

Byte[] encodedData = new Asn1Builder()
    .AddSequence(x => x.AddObjectIdentifier(new Oid("1.3.6.1.5.5.7.48.1")
        .AddImplicit(6, Encoding.ASCII.GetBytes("http://ocsp.example.com"), true))
    .GetEncoded();
var extension = new X509Extension("1.3.6.1.5.5.7.1.1", encodedData, false);

并在您的请求中添加 extension 项。如果您需要添加更多 URL,则添加更多 SEQUENCE 元素:

Byte[] encodedData = new Asn1Builder()
    .AddSequence(x => x.AddObjectIdentifier(new Oid("1.3.6.1.5.5.7.48.1")
        .AddImplicit(6, Encoding.ASCII.GetBytes("http://ocsp1.example.com"), true))
    .AddSequence(x => x.AddObjectIdentifier(new Oid("1.3.6.1.5.5.7.48.1")
        .AddImplicit(6, Encoding.ASCII.GetBytes("http://ocsp2.example.com"), true))
    .GetEncoded();
var extension = new X509Extension("1.3.6.1.5.5.7.1.1", encodedData, false);