ASN1 Yapı Kabul Sözdizimi


1

Kabul Uzantısını Sertifikama eklemek istiyorum. Bu nedenle, sertifika oluşturmak için OpenSSL kullanan Araç XCA'yı kullanıyorum.

Bu benim yapıtım, bazı sahte verilerle yazdığım:

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

Ama bu doğru değil. İlk hata burada ist aldım:

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

Orada Tagging eşleşmedi. Ama nedenini bilmiyorum. Kabul Sözdiziminin Tanımı bölümünde EPLICIT etiketlemeliyim ama GERNERALNAME IMPLICIT olarak etiketlenmiş olmalı, ancak bir hatayla karşılaştım. Peki sorun nedir?

Bir sonraki hata burada:

professionItems=UTF8String:String1,UTF8String:String2

PROFESSIONITEM bir YÖNLENDİRME DİZİDİR, fakat Java'da BouncyCastle Sertifikasını okuduğumda DERUTF8STRING İstisnası aldım, bu yüzden burada bir yanlışlık yapmalıyım, belki yanlış mı saptadım? Umarım herkes yardımcı olabilir.


Geçerli bir sertifika örneğiniz var mı?
Grawity

no :( eğer biri bir tane varsa, iyi olurdu :)
Opa114

Yanıtlar:


0

Oluşturulan yapıyı dumpasn1veya gibi araçları kullanarak görebilirsiniz openssl asn1parse -i.


Şema ve gerçek ASN.1 derleyicisini kullanarak örnek bir yapı oluşturmayı denedim .

  • KabulAuthority, bence , sadece açıkça etiketleme için yapılandırılması gerekiyor. (Etiketler hakkında en ufak bir fikrim yok.

    admissionAuthority = EXPLICIT:1, IA5STRING:MyGeneralName
    

    Derleyici çıktısına uyuyor gibi görünüyor.

  • OpenSSL'nin "UTF8String:" satırı sonuna kadar uzanıyor. Öyleyse sahip olduğunuz tek şey " String1,UTF8String:String2" değerine sahip bir mesele .

    Bunun gibi birden çok değer tanımlanabilir:

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

    Fakat bir SEQUENCE içinde olmaları gerektiğinden, yine ayrı bir bölüme ihtiyacınız var:

    professionItems = SEQUENCE:item_sect
    
    [item_sect]
    0 = UTF8String:String1
    1 = UTF8String:String2
    
  • Ancak, meslekÖğeleri'nin bir meslekler DİZİ olması gerekir . Sadece bir öğenin bir SEQ'si için en basit seçenek şudur:

    professionItems = SEQWRAP, SEQUENCE:item_sect
    

    Birden fazla öğeye ihtiyacınız varsa, başka bir bölüm kullanmanız gerekir:

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

Örneğinizi aşağıdaki yorumlarda başarıyla çoğaltdım:

[seq_sect] 
# 
GeneralName etiketi [4], directoryName #admissionAuthority = EXPLICIT: 1, IA5STRING şeklindedir: whatever@example.com 
#admissionAuthority = EXPLICIT: 2, IA5STRING: example.com
admissionAuthority = AÇIK: 4, DİZİ: yetki_adı_sekt
#admissionAuthority = AÇIK: 6, IA5STRING: https: //www.example.com/
# bu bir "SEQWRAP, SEQUENCE: admission0_sect" olabilir
# sadece bir kabul maddesi olduğu sürece
contentOfAdmissions = SEQUENCE: admissions_sect

    [yetkilisim_ismi_sect] 
    # bu bir isim ve bir RDNSequence ... 
    # her RelativeDistinguishedName genellikle sadece bir AttributeTypeAndValue 
    #'ye sahiptir (çoğul LDAP'da ancak nadiren olur), bu nedenle SETWRAP bu işi yapar
    rdn.1 = SETWRAP, DİZİ: otorite_dn_C_sect
    rdn.2 = SETWRAP, DİZİ: otorite_dn_O_sect
    rdn.3 = SETWRAP, DİZİ: otorite_dn_postal_sect

        [Authority_dn_C_sect]
        oid = OID: 2.5.4.6
        değer = PRINTABLESTRING: DE

        [Authority_dn_O_sect]
        oid = OID: 2.5.4.10
        değer = UTF8String: Firma A

        [Authority_dn_postal_sect]
        oid = OID: 2.5.4.16
        değer = DİZAYN: otorite_dn_postal_values

            [Authority_dn_postal_values]
            0 = UTF8String: Sokak
            1 = UTF8String: PostalCode Adres
            2 = UTF8String: DE

    [Admissions_sect]
    giriş.0 = SEKANS: giriş0_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

Java ile BouncyCastle ile ayrıştırırken denedim ama aynı hata. Meslekte UTF8String ile yapmak zorunda.
Opa114,

Tamam, onaltılık öğeleri bir ikili dosyaya dönüştürmeyi deneyin ve asn1parse veya dumpasn1 besleyin. Kendi paranla karşılaştır.
grawity

evet biliyorum ve bunu yaptım ama bu ve benim versiyonum arasındaki farkı göremiyorum. farkı gördün mü
Opa114,

Hmm, dumpasn1 yorumlamasında sıkıntı yaşıyorum. Ancak ondan bile, admissionAuthority = EXPLICIT:4, SEQUENCE:name_sectek bir fantezi etiketlemesi olmadan sonucuna denk gibi görünüyor . Açık etiket, GeneralName varyantını (bu durumda bir directoryName) işaretler, hepsi bu.
grawity

Yarın daha derinlemesine bir göz atacağım ve rapor edeceğim. Teşekkürler!
Opa114,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.