Синтаксис допуска структуры 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