Добавить сертификат ocsp Управление информацией Доступ и расширения политик в c # - PullRequest
0 голосов
/ 29 октября 2019

Я выдаю (с собственным центром сертификации) сертификат в коде c # ( на основе : .NET Core 2.0 класса CertificateRequest )

В CertificateRequest, невозможнодобавить расширение доступа к информации о полномочиях Certificate ocsp (oid: 1.3.6.1.5.5.7.1.1) и политики сертификатов (oid: 2.5.29.32) ( аналогичные результаты : расширение доступа к информации Authority )

Я не хочу использовать внешние библиотеки, возможно, только библиотеки 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

1 Ответ

1 голос
/ 29 октября 2019

Отказ от ответственности: Я твердо верю, что вы не должны использовать собственную систему шифрования / CA и использовать стандартное программное обеспечение CA для выдачи сертификатов, поскольку они предназначены для решения этой проблемы.


В .NET нет встроенной поддержки кодирования / декодирования ASN (включая .NET Core), вам необходимо использовать сторонние библиотеки.

Для кодирования 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);
...