Синтаксис допуска структуры ASN1

Я хочу добавить расширение приема в мой сертификат. Поэтому я использую Инструмент 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 ответ

Решение

Вы можете увидеть сгенерированную структуру, используя такие инструменты, как 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
    
  • Но, Детали профессии должны быть ПОСЛЕДОВАТЕЛЬНОСТЬЮ профессии в SEQ. Для 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 [4] isимя_каталога #admissionAuthority = EXPLICIT: 1, IA5STRING:what@example.com #admissionAuthority = EXPLICIT: 2, IA5STRING: example.com admissionAuthority = EXPLICIT: 4, SEQUENCE:author_name_sect #: 6, IA5STRING: https: //www.example.com/# это может быть "SEQWRAP, SEQUENCE:admission0_sect"
# до тех пор, пока существует только один элемент доступа.a RDNSequence...# каждое RelativeDistinguishedName, как правило, имеет только один AttributeTypeAndValue # (множественное происходит в LDAP, но редко), таким образом, SETWRAP выполняет свою работу здесь = SETWRAP, SEQUENCE:author_dn_postal_sect[ author_dn_C_sect] oid = OID: 2.5.4.6 значение = PRINTABLESTRING: DE [ author_dn_O_sect ] oid = OID: 2.5.4.10 значение = UTF8String: Firma A [ author_dn_postal_seid: значение: SEID: а uthority_dn_postal_values [authority_dn_postal_values] 0 = UTF8String: Улица 1 = UTF8String:PostalCode Адрес 2 = UTF8String: DE [admissions_sect] admission.0 = ПОСЛЕДОВАТЕЛЬНОСТЬ: admission0_sect [admission0_sect] professionInfos = ПОСЛЕДОВАТЕЛЬНОСТЬ: professionInfos_sect [professionInfos_sect] professionInfo.0 = ПОСЛЕДОВАТЕЛЬНОСТЬ: professionInfo0_sect [professionInfo0_sect ] # namingAuthority =... careerItems = ПОСЛЕДОВАТЕЛЬНОСТЬ: careerItems_sect # careerOIDs =... [професси Items_sect] профессиоИм.0 = UTF8Строка:Arzt/Ärztin
Другие вопросы по тегам