2017-03-01 17 views
6

मुझे एक SSL "खराब हैंडशेक" त्रुटि मिल रही है। इस समस्या के लिए सबसे समान प्रतिक्रिया पुराने पुस्तकालयों, 1024 बिट प्रमाण से लगती है। असंगतता, आदि ... I सोचें मैं अद्यतित हूं, और यह नहीं समझ सकता कि मुझे यह त्रुटि क्यों मिल रही है।पाइथन अनुरोधों के साथ SSL त्रुटि अप-टू-डेट निर्भरताओं के बावजूद

सेटअप:

  • अनुरोध 2.13.0
  • सर्टिफिकेट 2017/01/23
  • 'OpenSSL 1.0.2g 1 मार्च वर्ष 2016'

मैं इस एपीआई मार कर रहा हूँ (2048bit प्रमाण पत्र कुंजी): https://api.sidecar.io/rest/v1/provision/application/device/count/

और यह त्रुटि प्राप्त करना: requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)

https://github.com/sidecar-io/sidecar-python-sdk/blob/master/sidecar.py

की l.44 देखें अगर मैं अनुरोध में verify=False बारी है, मैं बायपास कर सकते हैं, लेकिन मैं नहीं बल्कि यह पता लगाने क्यों प्रमाणीकरण विफल हो रहा है चाहता हूँ।

किसी भी मदद की बहुत सराहना की जाती है; धन्यवाद!

उत्तर

6

सत्यापन विफल रहता है क्योंकि आपके द्वारा उपयोग किया जाने वाला सर्वर अनुचित सेटअप है, यानी यह आपके सेटअप या कोड की गलती नहीं है। report from SSLLabs को देखते हुए आप देख

This server's certificate chain is incomplete. Grade capped to B.

इसका मतलब यह है सर्वर ने ऐसा प्रमाणपत्र श्रृंखला है जो विश्वसनीय रूट करने के लिए मध्यवर्ती प्रमाणपत्र याद आ रही है और इस तरह अपने ग्राहक विश्वास श्रृंखला निर्माण नहीं कर सकते भेजता है। अधिकांश डेस्कटॉप ब्राउज़र इस समस्या के आसपास कहीं और गायब प्रमाणपत्र प्राप्त करने की कोशिश कर काम करते हैं लेकिन इस मामले में सामान्य टीएलएस पुस्तकालय विफल हो जाएंगे। के रूप में इस समस्या को हल करने के लिए पर भरोसा किया कि स्पष्टत लापता श्रृंखला प्रमाण पत्र को जोड़ने के लिए की आवश्यकता होगी:

import requests 
requests.get('https://api.sidecar.io', verify = 'mycerts.pem') 

mycerts.pem लापता मध्यवर्ती प्रमाणपत्र और विश्वसनीय रूट प्रमाणपत्र को शामिल करना चाहिए। mycerts.pem के लिए एक परीक्षण संस्करण http://pastebin.com/aZSKfyb7 में पाया जा सकता है।

+0

अद्भुत, अंतर्दृष्टि के लिए धन्यवाद! –

0

यह आपकी समस्या के लिए कामकाज के रूप में मदद कर सकता है।

print(requests.get(url, proxies,verify = False)) 
संबंधित मुद्दे