2009-10-05 9 views
8

का उपयोग कर एसएसएल में सहकर्मी को सत्यापित करना मैं यह पता लगाने की कोशिश कर रहा था कि मैं पाइथन में किसी सर्वर द्वारा स्वयं हस्ताक्षरित प्रमाणपत्र को सत्यापित करने के बारे में कैसे जा सकता हूं। मुझे Google में ज्यादा डेटा नहीं मिला। मैं यह भी सुनिश्चित करना चाहता हूं कि सर्वर यूआरएलपाइथन

किसी भी अंतर्दृष्टि के लिए अग्रिम धन्यवाद।

उत्तर

10

टिप्पणियों से मेरे पहले जवाब में मैं देखता हूं कि एक सामान्य गलतफहमी है कि 'प्रमाणपत्र प्रमाण सत्यापित करें' क्या होता है। मैं कुछ भ्रम को खत्म करने के लिए यहां एक संक्षिप्त स्पष्टीकरण लिखने की कोशिश करूंगा।

प्रमाणपत्र सत्यापन कुछ क्रिप्टोग्राफिक हस्ताक्षर के खिलाफ प्रमाणपत्र मेटाडेटा (यानी विषय, वैधता अवधि, एक्सटेंशन और ऐसे) पर हस्ताक्षर की जांच करने के बारे में है।

यदि आपके पास सत्यापन के लिए सब कुछ एक स्व-हस्ताक्षरित प्रमाणपत्र है, तो आप इसे एक ही मेटाडेटा के साथ किसी अन्य स्व-हस्ताक्षरित प्रमाणपत्र से अलग नहीं कर सकते हैं, लेकिन अलग-अलग कुंजी, जब तक कि आप पहले से ही महत्वपूर्ण प्रमाणपत्र की कुंजी नहीं जानते। और यह न भूलें कि आप इस पूर्व-साझा ज्ञान के लिए आवश्यकता को दूर करने के लिए इस सत्यापन प्रक्रिया को स्थापित करते हैं। नियमित प्रमाणपत्र सत्यापन के साथ आप कुछ पूर्व-साझा ज्ञान रखने के लिए आवश्यकता को पूरी तरह से हटा नहीं सकते हैं, जो कि तृतीय-पक्ष प्रमाणपत्रों का एक सेट है, जिसे 'सीए प्रमाण पत्र' भी कहा जाता है। चूंकि यह ज्ञान पूर्व-साझा किया गया है, इसलिए वे प्रमाणपत्र स्वयं हस्ताक्षरित हो सकते हैं, लेकिन याद रखें कि आपको सत्यापन प्रक्रिया से नहीं, बल्कि कुछ बाहरी ज्ञान से उन प्रमाणपत्रों की वैधता के बारे में जानकारी प्राप्त हुई है।

आप विश्वसनीय 'CA प्रमाणपत्र' साथियों के बीच वितरित, आप अन्य प्रमाणपत्र पर हस्ताक्षर और विश्वसनीय CA की है कि पहले से शेयर ज्ञान के खिलाफ हस्ताक्षर की जाँच करने के लिए उन का उपयोग कर सकते का एक सेट है जब।

लेकिन यदि आपके पास प्रमाण पत्र को छोड़कर स्वयं हस्ताक्षरित प्रमाण पत्र के बारे में कोई अतिरिक्त जानकारी नहीं है, तो आप इस विशेष प्रमाणपत्र पर विश्वास के बारे में कोई धारणा नहीं कर सकते हैं, क्योंकि इसे कुछ बुरा हैकर और साथ ही विश्वसनीय भरोसेमंद सर्वर द्वारा जारी किया जा सकता है।

कृपया किसी भी प्रकार की प्रमाणपत्र सत्यापन प्रक्रियाओं को लागू करने से पहले Man in the middle attack, Public key infrastructure और Public key cryptography के बारे में कुछ ज्ञान प्राप्त करें।

एक स्व-हस्ताक्षरित प्रमाणपत्र की है कि अंधे सत्यापन समझते हैं कृपया अपना नेटवर्क में एक चालाक हैकर से तुम भी रक्षा नहीं करेंगे, यहां तक ​​कि सामान्य रूप में इंटरनेट सुरक्षा पर विचार नहीं।

संपादित करें: प्रश्न लेखक ने स्पष्ट किया कि वह वास्तव में M2Crypto बाइंडिंग का उपयोग कर प्रमाण पत्र पर एक Verisign (या अन्य CA) हस्ताक्षर को सत्यापित करने के तरीके की तलाश में था। यहां दो उदाहरण हैं:

from M2Crypto import X509, SSL 

# manual validation of a signature on a certificate using a given CA cert: 
ca = X509.load_cert('/path/to/ca_cert.pem') 
cert = X509.load_cert('certificate_to_validate.pem') 
print "Verification results:", cert.verify(ca.get_pubkey()) 

# adding a given CA cert to the SSL Context for verification 
ctx = SSL.Context() 
# load a certificate from file 
ctx.load_verify_locations(cafile='/path/to/ca_cert.pem') 
# or use all certificate in a CA directory 
ctx.load_verify_locations(capath='/path/to/ca/dir') 
# or you can specify both options at the same time. 

आप कई CA प्रमाणपत्रों के साथ एक निर्देशिका (जो अक्सर अधिक सुविधाजनक है) आप <hash>.0 करने के लिए प्रत्येक प्रमाण पत्र जहां <hash> प्रमाणपत्र विषय के हैश है नाम बदलने चाहिए उपयोग करने के लिए जा रहे हैं (के साथ प्राप्त openssl x509 -noout -hash -in cert.pem)।

+0

क्षमा करें, मेरा प्रश्न गलत था। – Bhargava

+0

मैं वास्तव में M2Crypto का उपयोग कर Verisign- हस्ताक्षरित प्रमाणपत्र सत्यापन की तलाश में था। – Bhargava

+0

मैंने M2Crypto उदाहरणों के साथ उत्तर अद्यतन किया है। – abbot

0

अपनी प्रकृति के कारण स्वयं हस्ताक्षरित प्रमाणपत्र सत्यापित करना असंभव है: यह स्वयं हस्ताक्षरित है।

आपको कुछ अन्य विश्वसनीय तृतीय पक्ष के प्रमाण पत्र द्वारा प्रमाण पत्र पर हस्ताक्षर करने के लिए कुछ भी सत्यापित करने में सक्षम होना है, और उसके बाद आप अपने विश्वसनीय सीए की सूची में उस तीसरे पक्ष के प्रमाणपत्र को जोड़ सकते हैं और फिर आप प्रमाण पत्र सत्यापित कर पाएंगे उस प्रमाण पत्र/सीए द्वारा हस्ताक्षरित।

आप कैसे पायथन में ऐसा करने के बारे में सिफारिशें चाहते हैं, आप, आप उपयोग कर रहे एसएसएल पुस्तकालय का नाम देना चाहिए, क्योंकि वहाँ अजगर के लिए एसएसएल पुस्तकालयों का एक विकल्प है।

+0

सभी उच्च-स्तरीय CA प्रमाणपत्र स्व-हस्ताक्षरित कर रहे हैं और वहाँ कोई सत्यापित करें (विश्वास) उन्हें कोई समस्या नहीं है। –

+0

बेशक आप स्वयं हस्ताक्षरित प्रमाण पत्र सत्यापित कर सकते हैं, आपको केवल स्थानीय रूप से कॉपी प्रमाणपत्र की आवश्यकता है। यह मूल रूप से उस बिंदु पर एक सार्वजनिक/निजी कुंजी प्रमाणीकरण है। कई स्थानीय प्रमाणीकरण सिस्टम इस तरह से काम करते हैं, यह सत्यापित करते हुए कि मेजबान x.50 9 प्रमाण का उपयोग करके वैध है। पाइथन उदाहरणों के लिए प्रमाणमास्टर और func को देखें – JimB

2

मुझे लगता है कि आप कुछ ओपनएसएसएल बाइंडिंग का उपयोग करते हैं। मैं अपनी समस्या को हल करने के लिए 2 तरीके से देखते हैं।

  1. आप अपना प्रमाणपत्र ओपनएसएल निर्देशिका में जोड़ सकते हैं (openssl version -d को अपने सिस्टम के लिए देखने के लिए चलाएं)। यह आपकी मशीन पर openssl का उपयोग कर सभी कार्यक्रमों को प्रभावित करेगा।
  2. लोड प्रमाण पत्र और यह रन-टाइम (नीचे दिए गए कोड स्केच pyOpenSSL के लिए है, लेकिन यह अन्य बाइंडिंग के लिए समान होना चाहिए) जोड़ें:

x509 = OpenSSL.crypto.load_certificate(...) 
ctx = OpenSSL.SSL.Context(...) 
store = ctx.get_cert_store() 
store.add_cert(x509) 
ctx.set_verify(VERIFY_PEER | VERIFY_FAIL_IF_NO_PEER_CERT, ...) 
+0

इस कोड का उपयोग करके आप स्वयं हस्ताक्षरित प्रमाणपत्र की पुष्टि नहीं कर रहे हैं, आप इसे एक विश्वसनीय प्रमाणपत्र स्टोर में स्पष्ट रूप से जोड़ रहे हैं, इस प्रकार यह स्वयं 'सत्यापित' होगा। Openssl निर्देशिका में प्रमाणपत्र जोड़ना बिल्कुल वही करता है। फिर से, एक स्व-हस्ताक्षरित प्रमाणपत्र सत्यापित करना असंभव है: कोई भी स्वयं-हस्ताक्षरित प्रमाणपत्र आपके सत्यापन परीक्षण को पास कर देगा। – abbot