के साथ प्रेजेंटलिब के HTTPSConnection का उपयोग करने में त्रुटि मैं पीकेसीएस # 12 प्रमाणपत्र का उपयोग कर क्लाइंट सत्यापन के लिए प्रेजेंटप्लिब के HTTPSConnection का उपयोग करने का प्रयास कर रहा हूं। मुझे पता है कि प्रमाणपत्र अच्छा है, क्योंकि मैं इसे एमएसआईई और फ़ायरफ़ॉक्स में सर्वर से कनेक्ट कर सकता हूं।पीकेसीएस # 12 प्रमाणपत्र
यहां मेरा कनेक्ट फ़ंक्शन है (प्रमाणपत्र में निजी कुंजी शामिल है)। मैं सिर्फ मूल बातें करने के लिए इसे नीचे मुकाबले गया है:
def connect(self, cert_file, host, usrname, passwd):
self.cert_file = cert_file
self.host = host
self.conn = httplib.HTTPSConnection(host=self.host, port=self.port, key_file=cert_file, cert_file=cert_file)
self.conn.putrequest('GET', 'pathnet/,DanaInfo=200.222.1.1+')
self.conn.endheaders()
retCreateCon = self.conn.getresponse()
if is_verbose:
print "Create HTTPS connection, " + retCreateCon.read()
(नोट: हार्ड-कोडेड पथ पर कोई टिप्पणी नहीं है, कृपया - मैं इस पहले काम करने के लिए प्राप्त करने के लिए कोशिश कर रहा हूँ, मैं यह बहुत बाद में बना देंगे हार्ड-कोडेड पथ सही है, क्योंकि मैं इसे एमएसआईई और फ़ायरफ़ॉक्स में जोड़ता हूं। मैंने पोस्ट के लिए आईपी पता बदल दिया है।)
जब मैं इसे पीकेसीएस # 12 प्रमाणपत्र (ए। पीएफएक्स फ़ाइल) का उपयोग करके चलाने की कोशिश करता हूं), मैं वापस ओपनएसएसएल त्रुटि प्रतीत होता है। यहाँ पूरे त्रुटि ट्रैस है:
File "Usinghttplib_Test.py", line 175, in t.connect(cert_file=opts["-keys"], host=host_name, usrname=opts["-username"], passwd=opts["-password"]) File "Usinghttplib_Test.py", line 40, in connect self.conn.endheaders() File "c:\python26\lib\httplib.py", line 904, in endheaders self._send_output() File "c:\python26\lib\httplib.py", line 776, in _send_output self.send(msg) File "c:\python26\lib\httplib.py", line 735, in send self.connect() File "c:\python26\lib\httplib.py", line 1112, in connect self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file) File "c:\python26\lib\ssl.py", line 350, in wrap_socket suppress_ragged_eofs=suppress_ragged_eofs) File "c:\python26\lib\ssl.py", line 113, in __init__ cert_reqs, ssl_version, ca_certs) ssl.SSLError: [Errno 336265225] _ssl.c:337: error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib
सूचना, openssl त्रुटि (सूची में अंतिम प्रविष्टि) नोट "पीईएम lib" है, जो मैं अजीब पाया, क्योंकि मैं एक पीईएम प्रमाणपत्र का उपयोग करने का प्रयास नहीं कर रहा हूँ।
किक्स के लिए, मैंने पीकेसीएस # 12 प्रमाण को पीईएम प्रमाण में परिवर्तित कर दिया, और का उपयोग करके उसी कोड को चलाया। उस स्थिति में, मुझे कोई त्रुटि नहीं मिली, मुझे पीईएम पास वाक्यांश दर्ज करने के लिए कहा गया था, और कोड ने सर्वर तक पहुंचने का प्रयास किया था। (मुझे प्रतिक्रिया मिली "सेवा उपलब्ध नहीं है। कृपया बाद में पुनः प्रयास करें।", लेकिन मुझे विश्वास है कि ऐसा इसलिए होगा क्योंकि सर्वर पीईएम प्रमाण पत्र स्वीकार नहीं करता है। मैं पीईएम प्रमाण पत्र का उपयोग कर फ़ायरफ़ॉक्स में सर्वर से कनेक्ट नहीं कर सकता या तो।)
क्या हैस्पिस्प्लिब के HTTPSConnection को पीसीकेएस # 12 प्रमाणपत्रों का समर्थन करना चाहिए? (यानी, पीएफएक्स फाइलें हैं।) यदि हां, तो ऐसा क्यों लगता है कि ओपनएसएसएल इसे पीईएम लिब के अंदर लोड करने की कोशिश कर रहा है? क्या मैं यह सब गलत कर रहा हूँ?
कोई सलाह स्वागत है।
संपादित करें: प्रमाणपत्र फ़ाइल में प्रमाण पत्र और निजी कुंजी दोनों शामिल हैं, इसलिए मैं HTTPSConnection की key_file और cert_file पैरामीटर दोनों के लिए एक ही फ़ाइल नाम प्रदान कर रहा हूं।
आरटीएफएम के लिए +1। पिछले साल आप कहाँ थे जब मैं इस पर काम कर रहा था? :) –
हाय रेमी, मैं निशान से थोड़ी धीमी थी ;-) - मैं SO के लिए बिल्कुल नया हूं। बस एक ही त्रुटि स्ट्रिंग पर अपनी पोस्ट खोज में आया। बाहर निकलता है मैंने कॉल श्रृंखला के साथ कहीं भी तर्क आदेश को उलझाया था और कभी भी प्रेजिपीप्लिब में मुख्य पथ पारित नहीं किया था। – Blairo