2013-09-02 17 views
56

लेकिनTLS के साथ अनुरोध का उपयोग कर SNI समर्थन मैं एक Django अनुप्रयोग के साथ संवाद करने के लिए अनुरोध का उपयोग कर रहा

जब मैं

requests.get('https://mysite.com', verify=True) 

कोशिश त्रुटि नहीं देता मैं:

hostname 'mysite.com' doesn't match either of '*.myhost.com', 'myhost.com'

हालांकि, जब मैं ब्राउज़र को देखता हूं, या http://www.digicert.com/help/ प्रमाणपत्र ठीक और बेवकूफ दिखता है।

मेरे मेजबान ने सुझाव दिया कि यह अनुरोधों से एसएनआई समर्थन की कमी थी (और गिथब यह पुष्टि करता है कि https://github.com/kennethreitz/requests/issues/749)। क्या किसी ने अनुरोधों का उपयोग कर काम किया है?

+0

मैं एक वैकल्पिक हल के लिए Lukasa जवाब (सही) संपादित पुराने में SNI समर्थन प्राप्त करने हेतु यदि आप नवीनतम जीथ्यूब संस्करण का उपयोग नहीं कर सकते हैं तो अनुरोध करें। कृपया सुनिश्चित करें कि आपके सिस्टम में स्थापित निर्भरताएं (न केवल पाइथन वाले, openssl) भी हैं। संपादन की समीक्षा के बाद यह उपलब्ध होगा :) – AntonioMO

+0

मुझे लगता है कि यह है एक रेडिकल ई करने के बजाय बेहतर एक नया उत्तर बनाना बेहतर है किसी के पोस्ट में डुबकी –

+0

वैसे उसका जवाब सही है इसलिए मैंने सोचा कि किसी अन्य मामले के लिए एक और जवाब देना अच्छा नहीं था, व्यक्तिगत रूप से मैं वास्तव में सभी जानकारी रखने वाला एक जवाब पसंद करता हूं। लेकिन मैं फिर एक और जवाब पोस्ट करूंगा। – AntonioMO

उत्तर

116

अनुरोधों का वर्तमान संस्करण एसएनआई के साथ ठीक होना चाहिए। Further down the GitHub issue आप आवश्यकताओं को देख सकते हैं:

उन पैकेज स्थापित करने का प्रयास है और फिर इसे एक और शॉट देने के।

EDIT: अनुरोधों के अनुसार v2.12.1, ndg-httpsclient और pyasn1 अब आवश्यक नहीं हैं। आवश्यक संकुल की पूरी सूची है:

  • pyOpenSSL
  • IDNA
+3

धन्यवाद। मैंने यह पुल अनुरोध भी देखा है https://github.com/kennethreitz/requests/pull/1347 जो urllib3, ndg-httpsclient और pyasn1 को स्थापित करने के साथ मिलकर इसे हल करता है। – Massagran

+0

@qarma द्वारा उल्लिखित बग को [अंक 1732] (https://github.com/kennethreitz/requests/issues/1732) द्वारा ट्रैक किया जा रहा है और पहले से ही मास्टर में तय किया गया है। – Lukasa

+4

क्या यह फिक्स अभी भी काम कर रहा है? मुझे '' [एर्र्नो खराब हैंडशेक] [('एसएसएल रूटीन', 'एसएसएल 3_GET_SERVER_CERTIFICATE', 'प्रमाण पत्र सत्यापित विफल')] ''। – Roman

4

@Lukasa जवाब वर्तमान अनुरोध (GitHub से) के साथ सही है। उल्लेख है कि पीपी निर्भरताओं के अलावा आपके सिस्टम में ओपनएसएसएल को भी याद रखना याद रखें। क्रम में के लिए मुझे पाने के लिए स्वीकार कर लिया

import requests 


def fileno(self): 
    return self.socket.fileno() 


def close(self): 
    return self.connection.shutdown() 


requests.pyopenssl.WrappedSocket.close = close 
requests.pyopenssl.WrappedSocket.fileno = fileno 
22

:

तैनाती कारणों के लिए आप पिप में 1.2.3 की तरह एक स्थिर अनुरोध संस्करण को प्राथमिकता देते हैं, तो आप बंदर पैच एक SNI के साथ इस तरह काम करने के लिए कर सकते हैं कि

  • यम स्थापित libffi-devel
  • यम जीसीसी
  • स्थापित यम स्थापित खोलता है: काम करने के लिए जवाब देने के, मैं अन्य पैकेजों का एक समूह स्थापित करने के लिए, इसी क्रम में था sl devel-
  • urllib3 स्थापित पिप
  • pyOpenSSL स्थापित पिप
  • स्थापित पिप ndg-httpsclient
  • pyasn1
+2

मुझे भी इंस्टॉल करना पड़ा: yum इंस्टॉल पाइप इंस्टॉल करने से पहले पायथन-डेवेल स्थापित करें .. – Kaos

+0

दरअसल, मेरे लिए, ndg-httpsclient urllib3 को छोड़कर उन सभी पायथन पैकेज को स्थापित करता है। पाइप का हालिया संस्करण प्राप्त करने के लिए नोट करें, हालांकि, या यह किसी भी तरह काम नहीं करेगा .. – Kaos

+0

इतनी सारी स्थापना क्यों आवश्यक है - केवल उपयोगकर्ता के अनुरोध() '? – ihue

6

या फिर आप अजगर 2.7.9 का उपयोग कर सकते हैं और ऊपर स्थापित पिप:

"पायथन 3.4 के एसएसएल मॉड्यूल की पूरी तरह से पाइथन 2.7.9 के लिए बैकपोर्ट किया गया है। औचित्य के लिए पीईपी 466 देखें।"

https://www.python.org/downloads/release/python-279/

+3

मैं 'request.exceptions.SSLError प्राप्त कर रहा था: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 अलर्ट हैंडशेक विफलता (_ssl.c: 590)' और मेरे पास उपरोक्त आदेश निष्पादित करने से पहले पाइथन 2.7.10' – ihue

8

अनुरोधों स्थापित इस तरह मॉड्यूल। इस सुरक्षा पैकेज अतिरिक्त स्थापित हो जाएगा।

pip install requests[security]

+1

अपडेट पाइप है। – xialu

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

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