ASN1 구조 승인 구문


1

인증서에 Admission Extension을 추가하고 싶습니다. 이를 위해 OpenSSL을 사용하여 인증서를 만드는 Tool XCA를 사용합니다.

이것은 내가 더미 데이터로 쓴 내 structre입니다.

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의 시퀀스이지만 Java에서 BouncyCastle을 사용하여 인증서를 읽을 때 DERUTF8STRING 예외가 발생했습니다. 여기서 실수해야합니다. 어쩌면 내가 잘못 정의 했습니까? 누구든지 도울 수 있기를 바랍니다.


유효한 인증서의 예가 있습니까?
— grawity

아니오 :( 누군가가 있으면 좋을 것입니다 :)
— Opa114

답변:


0

당신은 같은 도구를 사용하여 생성 된 구조를 볼 수 있습니다 dumpasn1또는 openssl asn1parse -i.


스키마 와 실제 ASN.1 컴파일러를 사용하여 예제 구조를 만들려고했습니다 .

  • admissionAuthority는 생각 만 명시 적으로 태그를 구성 할 필요가있다. (하지만 태그에 대해서는 약간의 생각이 없습니다.

    admissionAuthority = EXPLICIT:1, IA5STRING:MyGeneralName
    

    컴파일러 출력과 일치하는 것 같습니다.

  • OpenSSL의 "UTF8String :"은 줄 끝까지 확장됩니다. 그래서 당신이 가진 것은 하나의 professionItem이며, 값은 " String1,UTF8String:String2"입니다.

    여러 값을 다음과 같이 정의 할 수 있습니다.

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

    그러나 그것들은 SEQUENCE 안에 있어야하기 때문에 다시 별도의 섹션이 필요합니다.

    professionItems = SEQUENCE:item_sect
    
    [item_sect]
    0 = UTF8String:String1
    1 = UTF8String:String2
    
  • 그러나 professionItems 는 professionInfo SEQ의 SEQUENCE 여야합니다 . 하나의 항목으로 구성된 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]는 directoryName입니다. 
#admissionAuthority = EXPLICIT : 1, IA5STRING : whatever@example.com 
#admissionAuthority = EXPLICIT : 2, IA5STRING : example.com
entranceAuthority = EXPLICIT : 4, SEQUENCE : authority_name_sect
#admissionAuthority = EXPLICIT : 6, IA5STRING : https : //www.example.com/
# "SEQWRAP, SEQUENCE : admission0_sect"일 수 있습니다.
# 입학 허가서가 하나만있는 한
contentsOfAdmissions = 순서 : 입학 _ 종

    [authority_name_sect] 
    # 이것은 RDNSequence라고도하는 이름입니다 ... 
    # 각 RelativeDistinguishedName에는 일반적으로 하나의 AttributeTypeAndValue 만 있습니다 
    (LDAP에서는 여러 번 발생하지만 거의 발생하지 않음). 따라서 SETWRAP는 여기서 작업을 수행합니다.
    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
        값 = PRINTABLESTRING : DE

        [authority_dn_O_sect]
        OID = OID : 2.5.4.10
        값 = UTF8String : Firma A

        [authority_dn_postal_sect]
        OID = OID : 2.5.4.16
        값 = SEQUENCE : authority_dn_postal_values

            [authority_dn_postal_values]
            0 = UTF8String : 거리
            1 = UTF8String : 우편 번호
            2 = UTF8String : DE

    [입학 _ 섹션]
    입학 .0 = 순서 : 입장 0_sect

        [입장 0_ 분류]
        professionInfos = 시퀀스 : professionInfos_sect

            [professionInfos_sect]
            professionInfo.0 = 순서 : professionInfo0_sect

                [professionInfo0_sect] 
                # namingAuthority = ...
                professionItems = 순서 : professionItems_sect
                # professionOIDs = ...

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

Java에서 BouncyCastle로 구문 분석 할 때 시도했지만 동일한 오류가 발생했습니다. 전문 분야의 UTF8String과 관련이 있습니다.
— Opa114

16 진수 파일을 이진 파일로 변환하여 asn1parse 또는 dumpasn1에 공급하십시오. 자신의 인증서와 비교하십시오.
— grawity

예, 알고 있으며이 작업을 수행했지만 위의 버전과이 버전의 차이점을 볼 수 없습니다. 차이점이 보입니까?
— Opa114

흠, 나는 dumpasn1이 그것을 해석하는 데 어려움을 겪고 있습니다. 그러나 그로부터도 admissionAuthority = EXPLICIT:4, SEQUENCE:name_sect멋진 태그를 추가하지 않은 결과 와 동등한 것으로 보입니다 . 명시 적 태그는 GeneralName 변형 (이 경우 directoryName)을 표시합니다.
— grawity

나는 내일 더 깊이보고보고 할 것이다. 감사!
— Opa114
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.