【问题标题】:Add Certificate ocsp Authority Information Access and policies extensions in c#在 c# 中添加证书 ocsp 权限信息访问和策略扩展
【发布时间】:2020-02-24 19:51:23
【问题描述】:

我正在使用 c# 代码(基于.NET Core 2.0 CertificateRequest class)颁发(具有自己的证书颁发机构)的证书

在 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

【问题讨论】:

  • 您需要什么选项? RSA 有很多不同的选项,例如填充和 TLS 1.2 与 TLS 1.3(参见 en.wikipedia.org/wiki/Comparison_of_TLS_implementations)。并且Net从32位移动到64位。新版本的Net增加了X509Certificate2。 Net 的默认值是 TLS 1.3,X509Certificate2 仍然需要在新的 Net 中使用 TLS 1.2。我不知道您可能拥有的所有选项和答案。只是知道最近我看到了很多使用新版本 Net 的 OP 和旧代码无法正常工作的问题。
  • 这有点不正确。授权信息访问扩展人口是 CA 的责任,而不是客户。您需要配置 CA 以在扩展中包含正确的 URL。客户端不应控制 AIA/CDP 扩展中包含哪些 URL。
  • @Crypt32:是的,CA 在颁发证书时包含正确的 URL。 SubjectAlternativeNameBuilder 可用,但无法弄清楚如何添加授权信息访问和证书扩展
  • 你看我的评论了吗?颁发证书中的 AIA 扩展人口是 CA 的责任,而不是客户。您不得在请求中包含 AIA 延期。此外,CA 会从请求中忽略此扩展,并使用其配置插入 AIA 扩展。
  • @Crypt32:正如问题中提到的,作为自己的 CA,我正在颁发客户端证书,而这里没有其他 CA。在 CA 等情况下,我需要自己插入 AIA 扩展,问题是如何插入。如果我向任何其他 CA 提交请求,我同意您的看法,他们需要插入 AIA 扩展并发出。

标签: c# .net-core certificate x509certificate2 ocsp


【解决方案1】:

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


.NET(包括 .NET Core)没有对 ASN 编码/解码的内置支持,您必须使用 3rd 方库。

对于 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);

【讨论】:

  • Crypt32,您知道使用New-SelfSignedCertificate Powershell cmdlet 及其TextExtension 参数添加AIA 扩展和OCSP url 属性的方法吗?由于我对 C# 不熟悉,所以我不太会翻译。
  • @ericOnline,对不起,我没有例子
猜你喜欢
  • 1970-01-01
  • 2021-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多