ASN1 संरचना प्रोक्यूरेशन सिंटैक्स


3

मैं अपने सर्टिफिकेट में प्रोसीडेंस एक्सटेंशन जोड़ना चाहता हूं। वहाँ मैं उपकरण XCA का उपयोग करता हूं, जो प्रमाण पत्र बनाने के लिए ओपनएसएसएल मान का उपयोग करता है।

यह ASN1 संरचना है:

ProcurationSyntax ::= SEQUENCE
{
    country [1] EXPLICIT PrintableString OPTIONAL
    typeOfSubstitution[2] EXPLICIT DirectoryString OPTIONAL
    signingFor [3] EXPLICIT SigningFor
}

SigningFor ::= CHOICE
{
    thirdPerson GeneralName
    certRef IssuerSerial
}

IssuerSerial ::= SEQUENCE
{
    issuer GeneralNames
    serial CertificateSerialNumber
    issuerUID UniqueIdentifier OPTIONAL
}

अब मैं इस एक्सटेंशन को मनमाने ढंग से एक्सटेंशन के रूप में Opensl conf ( https://www.openssl.org/docs/man1.1.0/apps/x509v3_config.html#ARBITRARY-EXTENSIONS ) के माध्यम से जोड़ना चाहता हूं

मेरा कोड यह दिखता है, लेकिन मैं बाकी पर अटक गया - थर्डपर्सन सामान:

1.3.36.8.3.2=ASN1:SEQUENCE:proc_sect

[proc_sect]
country=EXPLICIT:1,IA5STRING:EN
typeOfSubtitution=EXPLICIT:2,IA5STRING:My Type of Substitution
thirdPerson OR certRef=EXPLICIT:3,TODO

तो यह बहुत मददगार होगा अगर कोई लापता आराम का कार्य उदाहरण कोड प्रदान कर सकता है, वह है थर्डपर्सन और सर्टिफिकेट।

जवाबों:


4

पूरी बात का न्यूनतम उदाहरण

1.3.36.8.3.2 = ASN1:SEQUENCE:procuration

[procuration]
country            = EXP:1, PRINTABLE:EN
typeOfSubstitution = EXP:2, UTF8:My Type of Substitution
thirdPerson        = EXP:3, EXP:0, EXP:1, IA5:fred@example.com

एक टेस्ट केस प्राप्त करने के लिए, मैंने asn1- प्लेग्राउंड का उपयोग करके निम्नलिखित ASN.1 मान संकेतन संकलित किया :

procuration ProcurationSyntax ::= {
  country "EN",
  typeOfSubstitution utf8String : "My Type of Substitution",
  signingFor thirdPerson rfc822Name : "fred@example.com"
}

मैंने इस स्कीमा का उपयोग किया ।

[Proc]

विभिन्न विशिष्ट स्ट्रिंग प्रकारों पर ध्यान दें।

countryPrintableString के रूप में परिभाषित किया गया है (जो IA5String का केवल सबसेट है):

country = EXPLICIT:1, PRINTABLE:EN

typeOfSubstitutionDirectoryString के रूप में परिभाषित किया गया है , जो कि TeletexString, PrintableString, UniversalString, UTF8String, या BMPString के बीच एक CHOICE है - जिनमें से कुछ IA5String के सबसेट हैं, अन्य सुपरसेट हैं, लेकिन वास्तविक IA5String वास्तव में अनुमति नहीं है। तो चलिए यूटीएफ -8 यूनिकोड के साथ चलते हैं:

;                            ┌── tag for ProcurationSyntax sequence
;                            ¦
typeOfSubstitution = EXPLICIT:2, UTF8:My Type of Substitution

(ऑनलाइन asn1step का कहना है कि DirectoryString पसंद के लिए कोई अलग टैग नहीं है; मुझे लगता है कि सभी संभावित विकल्पों में अद्वितीय 'सार्वभौमिक' टैग पहले से मौजूद हैं।)

क्योंकि बनाम के signingForबीच एक CHOICE है , आप एक या दूसरे को शामिल कर सकते हैं , और यह उपयुक्त प्रकार का चयन करने के लिए आपके ऊपर है।thirdPersoncertRef

thirdPersonके रूप में परिभाषित किया गया है [0] GeneralName , जो विभिन्न प्रकारों के बीच एक CHOICE है - बिल्कुल वैसा ही चयन जैसा कि विषयअस्तित्व में है। उदाहरण के लिए, आप एक ईमेल पता (rfc822Name [1] IA5String) के रूप में शामिल कर सकते हैं:

;                ┌── tag for ProcurationSyntax sequence
;                │      ┌── tag for SigningFor choice
;                │      │      ┌── tag for GeneralName choice
;                ¦      ¦      ¦
thirdPerson = EXP:3, EXP:0, EXP:1, IA5:fred@example.com

या एक dNSName ([2] IA5String के रूप में परिभाषित):

thirdPerson = EXP:3, EXP:0, EXP:2, IA5:example.com

(या एक बिल्ली के बच्चे के एक MPEG वीडियो युक्त एक अन्य नाम।)

यदि, इसके बजाय, आप एक का चयन करना चाहते हैं certRef, तो यह एक पूरे नेस्टेड समुद्र तट है।

;            ┌── tag for ProcurationSyntax sequence
;            │      ┌── tag for SigningFor choice
;            ¦      ¦
certRef = EXP:3, IMP:1, SEQUENCE:proc_certref

[Proc_certref]

[proc_certref]अनुभाग के अंदर , आपको कम से कम issuerऔर परिभाषित करना होगा serial

issuerहै GeneralNames , जो GeneralName मूल्यों का एक दृश्य है।

issuer = IMP:0, SEQUENCE:proc_certref_issuer
;           └── tag for IssuerSerial sequence

serialहै सर्टिफिकेटसनलनंबर केवल एक पूर्णांक है।

serial = IMP:1, INTEGER:0x123456

नोट: मैं इस बारे में बहुत अनिश्चित हूं कि इनमें निहित टैग होने चाहिए या नहीं।

[Proc_certref_issuer]

महान। एक अन्य खंड, और उस पर एक GeneralNames । सौभाग्य से, इसमें से केवल एक ही है। दुर्भाग्य से, इसमें शून्य से अधिक है।

सबसे सरल वैध मूल्य एक एकल GeneralName होगा जो कि केवल rfc822Name या dNSName (दोनों IA5String) है:

issuer.0 = IMP:1, IA5:fred@example.com
;             └── tag for GeneralName choice

... वास्तव में, हम पहले ही एक निर्देशिका कर चुके हैं एक बार, हम नहीं थे? क्योंकि यह issuer.0एक GeneralName है, यह admissionAuthorityआपके पिछले एक्सटेंशन (उसी टैगिंग और सब कुछ के साथ) के समान सटीक प्रारूप का उपयोग करता है - इसलिए मैं इसे फिर से यहां लागू करने का प्रयास नहीं करूंगा।


इस बहुत विस्तृत विवरण के लिए बहुत बहुत धन्यवाद जो मुझे बहुत मदद करता है और कुछ बिंदुओं को स्पष्ट करता है। मैं अगले दिनों में इस पर गहन विचार करूंगा।
Opa114

मैंने इस पर ध्यान दिया। क्या दूसरा EXPLICIT बहुत ज्यादा नहीं है? thirdPerson = EXP:3, EXP:0, EXP:1, IA5:fred@example.com?
Opa114

हां, टैग वास्तव में गलत हो सकते हैं। मुझे लगता है कि यह इस बात पर निर्भर करता है कि पूरे स्कीमा के लिए कौन सी डिफ़ॉल्ट टैगिंग मोड का उपयोग किया गया था (आपकी पोस्ट में DEFINITIONS [<...> TAGS] ::=हेडर लाइन शामिल नहीं है इसलिए यह थोड़ा अस्पष्ट है)।
ग्रेविटी

संकेत के लिए धन्यवाद। मैं इसके लिए DEFINITIONSरिपोर्ट करूंगा ।
Opa114

1
जैसा कि मैंने देखा कि वहाँ डिफ़ॉल्ट मोड स्पष्ट है। लेकिन IMPLICITसीरियल, जारीकर्ता और जारीकर्ता पर टैग सही नहीं हैं, क्योंकि कोई टैग आधारभूत परिभाषा में नहीं दिया गया है, इसलिए यह EXPLICITडिफ़ॉल्ट रूप से होगा या मैं गलत हूं?
Opa114
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.