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.