2015-06-18 4 views
5

के साथ SSLv3 अलर्ट हैंडशेक विफलता मुझे Python 2.7.10 के तहत urllib2 का उपयोग करके https से कनेक्ट करने में समस्याएं आ रही हैं।urllib2

कोई विचार जो मुझे याद आ रहा है?

Python 2.7.10 (default, Jun 18 2015, 10:53:24) 
[GCC 4.4.5] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import ssl, urllib2 
>>> ssl.HAS_SNI 
True 
>>> ssl.OPENSSL_VERSION 
'OpenSSL 0.9.8o 01 Jun 2010' 
>>> opener = urllib2.build_opener() 
>>> opener.open('https://twitrss.me/') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/python2.7/lib/python2.7/urllib2.py", line 431, in open 
    response = self._open(req, data) 
    File "/usr/local/python2.7/lib/python2.7/urllib2.py", line 449, in _open 
    '_open', req) 
    File "/usr/local/python2.7/lib/python2.7/urllib2.py", line 409, in _call_chain 
    result = func(*args) 
    File "/usr/local/python2.7/lib/python2.7/urllib2.py", line 1240, in https_open 
    context=self._context) 
    File "/usr/local/python2.7/lib/python2.7/urllib2.py", line 1197, in do_open 
    raise URLError(err) 
urllib2.URLError: <urlopen error [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:590)> 
+0

यह समस्या विंडोज़ पर पाइथन 2.7.10 के साथ नहीं होती है। लेकिन यह मेरे साथ पायथन 2.7.11 के साथ ओएस एक्स पर होता है। मैं पेपैल खोलने की कोशिश कर रहा हूं। – user2233706

+0

मैंने पुष्टि की है कि यह समस्या ओएस एक्स पर पाइथन 2.7.10 के साथ होती है। तो पाइथन 2.7.10 के साथ विंडोज ठीक काम करता है। – user2233706

उत्तर

2

मैं पर ओएस एक्स 10.10.3, जिसका शेयर अजगर 2.7.6 OpenSSL 0.9.8zd के साथ बनाया गया है आपकी समस्या को नकल करने में सक्षम था।

सर्वर नाम संकेत (SNI) टीएलएस कंप्यूटर के लिए एक विस्तार है:

समस्या

Server Name Indication (SNI) TLS हैंडशेक में विस्तार है, जो twitrss.me साइट जाहिरा तौर पर की आवश्यकता है की कमी है नेटवर्किंग प्रोटोकॉल जिसके द्वारा एक क्लाइंट इंगित करता है कि कौन सा मेजबाननाम हैंडशेकिंग प्रक्रिया की शुरुआत में कनेक्ट करने का प्रयास कर रहा है।

मैं OpenSSL साथ एक छोटी सी सी ++ प्रोग्राम लिखने, और डालने OpenSSL कॉल

SSL_set_tlsext_host_name(ssl, "twitrss.me"); 

जबकि छोड़ते हुए यह विफल रहता है एक सफल कनेक्शन की अनुमति देता है के द्वारा इस सत्यापित। मैंने पैथन डंप को भी यह सत्यापित करने के लिए देखा कि एसईआईआई पाइथन का उपयोग कर कनेक्शन का प्रयास करते समय गायब था।

पायथन एसएसएल मॉड्यूल स्पष्ट रूप से supports SNI in Python 3 लेकिन may require a workaround in Python 2। ऐसा लगता है कि PEP 0466 में एसएनआई शामिल है और पायथन 2.7.9 में उतरा है, इसलिए आपको यह होना चाहिए, लेकिन मुझे नहीं पता कि urllib2/urllib3 बिना किसी काम के लाभ का लाभ उठाएं।

+1

* "मैंने इसे एक छोटा सी ++ प्रोग्राम लिखकर सत्यापित किया है ..." * - 'openssl s_client -connect twitrss.me:443 -tls1 -servername twitrss.me' ठीक काम करता है। कोई प्रोग्रामिंग की आवश्यकता नहीं है। '-सर्वरनाम' एसएनआई विकल्प है। – jww