5

मेरे पास क्लाइंट प्रमाणपत्र "ए" है जो CA1 प्रमाणपत्र द्वारा हस्ताक्षरित है। रूट प्रमाण पत्र द्वारा सीए 1 प्रमाण पत्र पर हस्ताक्षर किए गए हैं।भरोसेमंद internediate CA प्रमाण पत्र का उपयोग कर क्लाइंट प्रमाणपत्र को सत्यापित करने के लिए कैसे?

अब मेरे पास सीए 1 प्रमाण पत्र (भरोसेमंद) है और क्लाइंट प्रमाणपत्र (गैर भरोसेमंद) प्राप्त हुआ है। सत्यापन के दौरान मुझे केवल सीए 1 (भरोसेमंद) का उपयोग कर क्लाइंट सर्टिफिकेट के ट्रस्ट पथ को सत्यापित करने की आवश्यकता है .. मुझे रूट प्रमाणपत्र नहीं मिला है।

क्या यह सत्यापन करना संभव है?

मैं ओपेन्सस्ल 1.0.0 जी संस्करण लाइब्रेरी का उपयोग कर रहा हूं। अगर कोई जानता है कि ऐसा कैसे करें तो कृपया मेरे साथ साझा करें।

+0

सहायक हो सकता है: http://stackoverflow.com/questions/13295585/openssl-certificate-verification-on-linux – JSuar

+0

2 बालमुरुगन: मुझे खेद है। मैं अपने उत्तर में गलत था जो मैंने पोस्ट किया था। मैंने इसे मिटा दिया। मैंने "openssl सत्यापित" के पैरामीटर की जांच की और ऐसा लगता है कि इसे प्रमाणपत्रों की पूरी श्रृंखला की आवश्यकता है। –

+0

बीटीडब्ल्यू। एक प्रश्न। आप रूट प्रमाणपत्र को ऑफ़लाइन क्यों नहीं प्राप्त कर सकते हैं और इसे CA1 प्रमाणपत्र (इसे ठीक से सत्यापित करने के लिए) को कैटकेनेट कर सकते हैं। परीक्षण केस क्या है जब आपके पास CA1 प्रमाणपत्र तक पहुंच है, लेकिन रूट प्रमाणपत्र तक पहुंच नहीं है? –

उत्तर

2

चूंकि आपने टैग, ssl-certificate दिया है, मुझे लगता है कि आपको सर्वर प्रमाण सत्यापन या क्लाइंट प्रमाण सत्यापन के लिए किसी SSL कनेक्शन के दौरान ऐसी सत्यापन की आवश्यकता है।

OpenSSL API SSL_CTX_set_verify का उपयोग कर सत्यापन कॉलबैक सेट करके इसे प्राप्त करने का एक आसान तरीका।

यह बात यह है कि, इस कॉलबैक को प्रमाण पत्र सत्यापन के दौरान हर बार एक त्रुटि का सामना करना पड़ता है, इसलिए आपके मामले में, जब रूट नहीं मिल सका, तो इस कॉलबैक को X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT त्रुटि के साथ बुलाया जाएगा। आपके पास X509_STORE_CTX * तक पहुंच होगी, जिससे आप अभी तक सत्यापित प्रमाणपत्रों का विवरण प्राप्त कर सकते हैं। इस तंत्र का उपयोग करके, आप यह देखने के लिए अपने कोड में उपयुक्त तर्क लागू कर सकते हैं कि आपकी एंड एंटिटी और इंटरमीडिएट सीए कर्ट सही हैं या नहीं, अगर आप ठीक हैं, तो आप कॉलबैक से सफलता वापस कर सकते हैं, जो सत्यापन के साथ जारी रखने के लिए ओपनएसएसएल को संकेत देगा सत्यापन में विफल किए बिना। OpenSSL के दस्तावेज़ से


अधिक विवरण:

verify_callback समारोह व्यवहार को नियंत्रित करने के लिए जब SSL_VERIFY_PEER ध्वज सेट है प्रयोग किया जाता है। इसे आवेदन द्वारा आपूर्ति की जानी चाहिए और दो तर्क प्राप्त होते हैं: preverify_ok इंगित करता है कि प्रश्न में प्रमाण पत्र का सत्यापन पास किया गया था (preverify_ok = 1) या नहीं (preverify_ok = 0)। x509_ctx प्रमाण पत्र श्रृंखला सत्यापन के लिए उपयोग किए गए पूर्ण संदर्भ के लिए एक सूचक है।

सर्टिफिकेट चेन गहन घोंसले स्तर (रूट सीए प्रमाण पत्र) से शुरू होने की जांच की जाती है और सहकर्मी के प्रमाणपत्र में ऊपर की ओर काम करती है। प्रत्येक स्तर के हस्ताक्षर और जारीकर्ता गुणों की जांच की जाती है। जब भी कोई सत्यापन त्रुटि पाई जाती है, तो त्रुटि संख्या x509_ctx में संग्रहीत होती है और verify_callback को preverify_ok = 0 के साथ बुलाया जाता है। X509_CTX_store_ * फ़ंक्शन सत्यापित करके_callback प्रश्न में प्रमाण पत्र का पता लगा सकता है और अतिरिक्त चरणों को निष्पादित कर सकता है (उदाहरण देखें)। यदि प्रमाणपत्र के लिए कोई त्रुटि नहीं मिली है, तो अगले स्तर पर जाने से पहले verify_callback को preverify_ok = 1 के साथ बुलाया जाता है।

verify_callback का वापसी मूल्य आगे सत्यापन प्रक्रिया की रणनीति को नियंत्रित करता है। यदि verify_callback 0 देता है, तो सत्यापन प्रक्रिया तुरंत 'सत्यापन विफल' स्थिति के साथ बंद कर दी जाती है। यदि SSL_VERIFY_PEER सेट है, तो एक सत्यापन विफलता चेतावनी सहकर्मी को भेजी जाती है और टीएलएस/एसएसएल हैंडशेक समाप्त कर दिया जाता है। अगर verify_callback 1 लौटाता है, सत्यापन प्रक्रिया जारी है। अगर verify_callback हमेशा 1 लौटाता है, तो टीएलएस/एसएसएल हैंडशेक सत्यापन विफलताओं के संबंध में समाप्त नहीं किया जाएगा और कनेक्शन स्थापित किया जाएगा। हालांकि कॉलिंग प्रक्रिया SSL_get_verify_result (3) का उपयोग कर अंतिम सत्यापन त्रुटि के त्रुटि कोड को पुनर्प्राप्त कर सकती है या सत्यापित_callback द्वारा प्रबंधित अपने स्वयं के त्रुटि संग्रहण को बनाए रख सकती है।

यदि कोई सत्यापन_callback निर्दिष्ट नहीं है, तो डिफ़ॉल्ट कॉलबैक का उपयोग किया जाएगा।इसका रिटर्न वैल्यू preverify_ok के समान है, ताकि किसी भी सत्यापन विफलता से एसएलएल_VERIFY_PEER सेट हो, तो एक चेतावनी संदेश के साथ टीएलएस/एसएसएल हैंडशेक को समाप्त कर दिया जाएगा।