2017-12-20 79 views
5

मैं Elasticsearch Searchguard के लिए प्रमाण पत्र बनाने का प्रयास कर रहा हूं। एक आवश्यकता यह है कि प्रमाण में SAN में oid:1.2.3.4.5.5 शामिल होना चाहिए। मैं उस प्रमाण को उत्पन्न करने के लिए जाओ का उपयोग कर रहा हूं। कुछ परीक्षण और त्रुटि के बाद मुझे पता चला है कि अगर मैं []byte{0x88, 0x05, 0x2A, 0x03, 0x04, 0x05, 0x05} कच्चे ASN.1 बाइट्स के रूप में उपयोग करता हूं, तो यह SAN में oid:1.2.3.4.5.5 में बदल जाता है। मैं समझना चाहता हूं कि ये बाइट्स मूल्य oid:1.2.3.4.5.5 का प्रतिनिधित्व कैसे करते हैं। मैंने this पढ़ा है, लेकिन मैं अभी भी उलझन में हूं। क्या आप यह समझने में मेरी सहायता कर सकते हैं कि यह [] बाइट oid:1.2.3.4.5.5 का प्रतिनिधित्व कैसे करता है?डीईआर बाइट्स को कैसे पार्स करें?

उत्तर

5

अधिकतर धोखा How does ASN.1 encode an object identifier?

(509 = PKIX) सैन एक्सटेंशन के मूल्य की एन्कोडिंग के रूप में rfc5280 में परिभाषित किया गया है:

SubjectAltName ::= GeneralNames 
GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName 
GeneralName ::= CHOICE { // tags implicit 
    otherName     [0] AnotherName, 
    rfc822Name    [1] IA5String, 
    dNSName     [2] IA5String, 
    x400Address    [3] ORAddress, 
    directoryName    [4] Name, 
    ediPartyName    [5] EDIPartyName, 
    uniformResourceIdentifier [6] IA5String, 
    iPAddress     [7] OCTET STRING, 
    registeredID    [8] OBJECT IDENTIFIER } 

इस चुनाव है, आपकी पहली ओकटेट 0x88 टैग मान है संदर्भ-विशिष्ट # 8 (जिसका अर्थ है पंजीकृत आईडी), और आपका दूसरा ऑक्टेट 0x05 मान की लंबाई है, जिसे 0x2A 0x03 0x04 0x05 0x05 के रूप में एन्कोड किया गया है। चूंकि यह मूल्य एक वस्तु पहचानकर्ता है, यह Kaliski दस्तावेज़ में ऑब्जेक्ट पहचानकर्ता के तहत एन्कोडिंग पर अनुभाग देखें डिकोड करने के लिए:

संख्या एन्कोडिंग। आदिम।

  1. पहले ऑक्टेट मान 40 * मान 1 + मान 2 है: सामग्री ओक्टेट्स इस प्रकार है, जहां मान 1, ..., पूरा ऑब्जेक्ट पहचानकर्ता में घटकों के पूर्णांक मूल्यों निरूपित valuen हैं। (यह स्पष्ट नहीं है, क्योंकि मान 1 मान 0, 1, और 2 तक सीमित है; मान 2 0 से 39 तक सीमित है जब मान 1 0 या 1 है, और X.208 के अनुसार, n हमेशा कम से कम 2 होता है ।)

  2. निम्नलिखित ऑक्टेट्स, यदि कोई है, तो मान 3 को एन्कोड करें ..., वैलेंटाइन। प्रत्येक मान को बेस 128 एन्कोड किया गया है, सबसे महत्वपूर्ण अंक पहले, अंकों जितना संभव हो सके, और को छोड़कर प्रत्येक ऑक्टेट का सबसे महत्वपूर्ण बिट मूल्य के एन्कोडिंग सेट में "1."

पहला मान ओकटेट 0x2A दशमलव 42 और 42 = 40 * 1 + 2 है, तो OID के पहले दो घटकों 1 कर रहे हैं और 2. शेष ओक्टेट्स की सभी उनके most- नहीं है महत्वपूर्ण बिट सेट ताकि वे प्रत्येक एक घटक को एन्कोड कर सकें: 3 4 5 5. घटकों से युक्त ओआईडी 1 2 3 4 5 5 सामान्य शॉर्टंड नोटेशन 1.2.3.4.5.5 में है (लेकिन कलिस्की में दिखाए गए अन्य समकक्ष नोटेशन हैं) ।

संयोग से, कि ओआईडी अवैध है क्योंकि इसे आईएसओ 3166 संख्यात्मक कोड 3 के साथ देश के सदस्य-निकाय के अधीन होना होगा और ऐसा कोई देश नहीं है।

+0

स्पष्टीकरण @ dave_thompson_085 के लिए बहुत बहुत धन्यवाद! – codefx

संबंधित मुद्दे