1

Я хочу добавить расширение приема в мой сертификат. Поэтому я использую Инструмент XCA, который использует OpenSSL для создания сертификатов.

Это моя структура, которую я написал с некоторыми фиктивными данными:

1.3.36.8.3.3=ASN1:SEQUENCE:seq_sect

[seq_sect]
admissionAuthority=IMPLICIT:1,IA5STRING:MyGeneralName
contentsOfAdmissions=SEQUENCE:admissions_sect

[admissions_sect]
admissionAuthority=EXPLICIT:0,IMPLICIT:1,IA5STRING:MyGeneralNameAdmission
namingAuthority=EXPLICIT:1,SEQUENCE:namingAuthorithy_sect
professionInfos=SEQUENCE:professionInfo_sect

[professionInfo_sect]
namingAuthority=EXPLICIT:0,SEQUENCE:namingAuthorithy_sect
professionItems=UTF8String:String1,UTF8String:String2
professionOIDs=SEQUENCE:oid_sect
registrationNumber=PRINTABLESTRING:registrationNumber
addProfessionInfo=OCTETSTRING:ProffessionInfo

[oid_sect]
one=OID:1.2.3.4
two=OID:1.2.3.5

[namingAuthorithy_sect]
namingAuthorityId=OID:1.2.3.4
namingAuthorityUrl=IA5STRING:http://www.url.de
namingAuthorithyText=UTF8String:namingAuthorityTEXT

Но это не правильно. Первая ошибка, которую я получил здесь:

admissionAuthority=EXPLICIT:0, IMPLICIT:1,IA5STRING:MyGeneralNameAdmission

Там теги не совпадали. Но не знаю почему. В определении синтаксиса допуска я должен пометить его как EPLICIT, но GERNERALNAME должен быть помечен как IMPLICIT, но я получил ошибку. так в чем проблема?

Следующая ошибка здесь:

professionItems=UTF8String:String1,UTF8String:String2

PROFESSIONITEM - это ПОСЛЕДОВАТЕЛЬНОСТЬ DIRECTORYSTRING, но когда я прочитал в сертификате с BouncyCastle на Java, я получил исключение DERUTF8STRING, так что здесь я должен ошибиться, может быть, я определил его как ложное? надеюсь, кто-нибудь может помочь.

1 ответ1

0

Вы можете увидеть сгенерированную структуру, используя такие инструменты, как dumpasn1 или openssl asn1parse -i .


Я попытался создать пример структуры, используя схему и фактический компилятор ASN.1.

  • Полагаю, что admissionAuthority нужно настроить только для явной пометки. (Хотя у меня нет ни малейшего представления о тегах.

    admissionAuthority = EXPLICIT:1, IA5STRING:MyGeneralName
    

    Который, кажется, соответствует выводу компилятора.

  • «UTF8String:» в OpenSSL продолжается до конца строки. Итак, у вас есть один профессиональный элемент со значением " String1,UTF8String:String2 ".

    Несколько значений могут быть определены следующим образом:

    professionItems.0 = UTF8String:String1
    professionItems.1 = UTF8String:String2
    

    Но так как они должны быть внутри ПОСЛЕДОВАТЕЛЬНОСТИ, вам снова нужен отдельный раздел:

    professionItems = SEQUENCE:item_sect
    
    [item_sect]
    0 = UTF8String:String1
    1 = UTF8String:String2
    
  • Но, professionItems должна быть последовательность SEQ professionInfo годов. Для SEQ только одного элемента, самый простой вариант:

    professionItems = SEQWRAP, SEQUENCE:item_sect
    

    Если вам нужно несколько элементов, вам придется использовать другой раздел:

    professionItems = SEQUENCE:prof_items_sect
    
    [prof_items_sect]
    0 = SEQUENCE:item0_sect
    1 = SEQUENCE:item1_sect
    ...
    

Я успешно воспроизвел ваш пример в комментариях:

[seq_sect]
# GeneralName tag [4] is directoryName
#admissionAuthority = EXPLICIT:1, IA5STRING:whatever@example.com
#admissionAuthority = EXPLICIT:2, IA5STRING:example.com
admissionAuthority = EXPLICIT:4, SEQUENCE:authority_name_sect
#admissionAuthority = EXPLICIT:6, IA5STRING:https://www.example.com/
# this could be a "SEQWRAP, SEQUENCE:admission0_sect"
# as long as there's only one admission item
contentsOfAdmissions = SEQUENCE:admissions_sect

    [authority_name_sect]
    # this is a Name aka a RDNSequence...
    # each RelativeDistinguishedName generally only has one AttributeTypeAndValue
    # (multiple happen in LDAP but rarely), thus SETWRAP does the job here
    rdn.1 = SETWRAP, SEQUENCE:authority_dn_C_sect
    rdn.2 = SETWRAP, SEQUENCE:authority_dn_O_sect
    rdn.3 = SETWRAP, SEQUENCE:authority_dn_postal_sect

        [authority_dn_C_sect]
        oid = OID:2.5.4.6
        value = PRINTABLESTRING:DE

        [authority_dn_O_sect]
        oid = OID:2.5.4.10
        value = UTF8String:Firma A

        [authority_dn_postal_sect]
        oid = OID:2.5.4.16
        value = SEQUENCE:authority_dn_postal_values

            [authority_dn_postal_values]
            0 = UTF8String:Street
            1 = UTF8String:PostalCode Adress
            2 = UTF8String:DE

    [admissions_sect]
    admission.0 = SEQUENCE:admission0_sect

        [admission0_sect]
        professionInfos = SEQUENCE:professionInfos_sect

            [professionInfos_sect]
            professionInfo.0 = SEQUENCE:professionInfo0_sect

                [professionInfo0_sect]
                # namingAuthority = ...
                professionItems = SEQUENCE:professionItems_sect
                # professionOIDs = ...

                    [professionItems_sect]
                    professionItem.0 = UTF8String:Arzt/Ärztin

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .