Sintaxe de admissão de estrutura ASN1

1

Eu quero adicionar a extensão de admissão ao meu certificado. Por isso eu uso a ferramenta XCA, que usa o OpenSSL para criar os certificados.

Esta é a minha estrutura que escrevi com alguns Dados fictícios:

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

Mas isso não está certo. Primeiro erro que tenho aqui:

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

A marcação não coincidiu. Mas não sei porque. Na definição da sintaxe de admissão eu tenho que tagg ele EPLICIT mas o GERNERALNAME deve ser marcado IMPLICIT, mas eu tenho um erro. então onde está o problema?

O próximo erro está aqui:

professionItems=UTF8String:String1,UTF8String:String2

PROFESSIONITEM é uma SEQUÊNCIA de DIRECTORYSTRING, mas quando eu li no certificado com BouncyCastle em Java eu tenho exceção DERUTF8STRING, então aqui deve um erro por mim, talvez eu defini falso? espero que alguém possa ajudar.

    
por Opa114 13.07.2015 / 13:48

1 resposta

0

Você pode ver a estrutura gerada usando ferramentas como dumpasn1 ou openssl asn1parse -i .

Eu tentei criar uma estrutura de exemplo usando o esquema e um verdadeiro compilador ASN.1 .

  • A admissionAuthority, eu acho , só precisa ser configurada para marcação explícita. (Eu não tenho a menor idéia sobre tags embora.

    admissionAuthority = EXPLICIT:1, IA5STRING:MyGeneralName
    

    Que parece corresponder à saída do compilador.

  • "UTF8String:" do OpenSSL se estende até o final da linha. Então, o que você tem é um professionItem, com o valor " String1,UTF8String:String2 ".

    Vários valores podem ser definidos assim:

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

    Mas, como eles precisam estar dentro de uma SEQUENCE, você precisa novamente de uma seção separada:

    professionItems = SEQUENCE:item_sect
    
    [item_sect]
    0 = UTF8String:String1
    1 = UTF8String:String2
    
  • Mas, professionItems precisa ser uma SEQÜÊNCIA de professionInfo SEQ. Para uma SEQ de apenas um item, a opção mais simples é:

    professionItems = SEQWRAP, SEQUENCE:item_sect
    

    Se você precisasse de vários itens, teria que usar outra seção:

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

Reproduzi seu exemplo com sucesso em comentários com:

[seq_sect]
# GeneralName tag [4] is directoryName
#admissionAuthority = EXPLICIT:1, IA5STRING:[email protected]
#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
    
por 13.07.2015 / 14:19