2009-02-04 12 views
7

का उपयोग कर X509 प्रमाणपत्रों पर एक्सटेंशन क्वेरी करना मैं ओपनएसएसएल लाइब्रेरी के X509 प्रमाणपत्र वर्ग के साथ काम कर रहा हूं, और मुझे "कुंजी उपयोग" एक्सटेंशन से पूछताछ करने की आवश्यकता है।ओपनएसएसएल

OpenSSL के vapourware "प्रलेखन" छोड़ने के बाद, कुछ शॉट-इन-द-अंधेरे वेब खोज अंततः पता चला है कि मैं

X509_get_ext_d2i(X509 *x, int nid, int *crit, int *idx) 

और objects.h हेडर के माध्यम से खोज फोन करने के लिए आवश्यक उचित एनआईडी का पता चला।

समस्या है, इस कॉल शून्य करने के लिए एक सूचक है, जो जाहिरा तौर पर क्या एक्सटेंशन के लिए एक की मांग की है पर निर्भर करता है structs की एक किस्म को इंगित कर सकते हैं देता है।

के बाद से इनमें से कोई भी दस्तावेज होना दिखाई देते हैं, एक एक तरह से बिना छोड़ दिया जाता है यह पता लगाने की कैसे क्या पार्स करने के लिए समारोह रिटर्न।

किसी को भी (आदि समारोह प्रोफ़ाइल, जो फाइल यह से आता है,) एक दस्तावेज है कि वास्तव में सिर्फ लिस्टिंग बातें मैं खुद के लिए पता कर सकते हैं के बजाय, इस बारे में बात करती करने के लिए मुझसे बात कर सकते हैं?

+1

मेरे पास कोई जवाब नहीं है, लेकिन मैं दस्तावेज़ीकरण गुणवत्ता के बारे में भावना 2 ओपनएसएसएल ... मैं इसके साथ भी काम कर रहा हूं (बस शुरू कर रहा हूं), और सरल संचालन से परे किसी भी चीज़ के लिए उदाहरण या दस्तावेज़ ढूंढने की भयानक कोशिश है ... मुझे तुम्हारा दर्द महसूस होता है। – Nick

+1

एपीआई का उपयोग करने का एकमात्र तरीका यह था कि कमांडलाइन टूल (स्रोत) लेना, कोड को हैक करना (उस कमांडलाइन पर पैरामीटर को टिप्पणी करें जिसकी मुझे आवश्यकता नहीं थी) और पता लगाया गया था। वहां से मैं अंतराल को भरने के लिए एपीआई "दस्तावेज़" का उपयोग करने में सक्षम था। – Joe

उत्तर

2

दूसरा पैरामीटर (निड) लौटा प्रकार निर्धारित करता है। इस कोड में

देख रहे हैं:

http://opengrok.creo.hu/dragonfly/xref/src/crypto/openssl-0.9/crypto/x509v3/v3_purp.c#X509_check_purpose

ऐसा लगता है कि कुंजी उपयोग एनआईडी के लिए, यह एक ASN1_BIT_STRING देता है। (लाइन 361)।

5

कुंजी उपयोग को पढ़ने के लिए सबसे आसान समाधान

X509* x509_cert = ... 
// without X509_check_ca x509_cert->ex_kusage always returns 0 (no idea why) 
int ca = X509_check_ca(x509_cert); 
unsigned long usage = x509_cert->ex_kusage; 

जिसके परिणामस्वरूप मूल्यों opensc/pkcs15-init.h

SC_PKCS15INIT_X509_DIGITAL_SIGNATURE  0x0080UL 
SC_PKCS15INIT_X509_NON_REPUDIATION  0x0040UL 
SC_PKCS15INIT_X509_KEY_ENCIPHERMENT  0x0020UL 
SC_PKCS15INIT_X509_DATA_ENCIPHERMENT  0x0010UL 
SC_PKCS15INIT_X509_KEY_AGREEMENT   0x0008UL 
SC_PKCS15INIT_X509_KEY_CERT_SIGN   0x0004UL 
SC_PKCS15INIT_X509_CRL_SIGN    0x0002UL 

में परिभाषित कर रहे हैं मैं पता लगाकर कि soultion के लिए आया था प्रतीत हो रहा है एक openssl स्रोत फ़ाइल के निम्नलिखित कोड

/* Handle key usage */ 
if((usage=X509_get_ext_d2i(x, NID_key_usage, NULL, NULL))) { 
    if(usage->length > 0) { 
     x->ex_kusage = usage->data[0]; 
     if(usage->length > 1) 
     x->ex_kusage |= usage->data[1] << 8; 
    } else x->ex_kusage = 0; 
    x->ex_flags |= EXFLAG_KUSAGE; 
    ASN1_BIT_STRING_free(usage); 
} 
+0

मेरा 'x509.h' में चेतावनी है:'/* इसमें X509 संरचना में कई तत्वों के लिए 'ex_kusage' सहित विभिन्न एक्सटेंशन मानों की प्रतियां */'शामिल हैं। शायद यह तब तक शून्य क्यों है जब तक कि आप उस फ़ंक्शन को कॉल न करें। – chacham15

+0

आप 'ex_flags' का मूल्य की जाँच करने के अगर यह' EXFLAG_SET' मतलब यह है कि 'ex_kusage' और' ex_xkusage' सेट कर रहे हैं है है और आप 'कॉल करने के लिए X509_check_ca', तो आप अधिक जानकारी के लिए जाँच कर सकते हैं' v3_purp.c' की जरूरत नहीं है – bikram990

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