SSLError: плохое рукопожатие, запросы Python
Я потребляюEbay Trading API с помощьюEbay Python SDK который в конечном итоге петьпитон-запросы для выполнения вызовов API.
Все работало нормально, но с последних дней я не могу позвонить. Я получаю ошибку:
SSLError: bad handshake: Error([('SSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed')],)
Вот полная трассировка:
In [9]: response = api.execute('GetSessionID', data)
---------------------------------------------------------------------------
SSLError Traceback (most recent call last)
<ipython-input-9-eb33610c2a7f> in <module>()
----> 1 response = api.execute('GetSessionID', data)
/home/debian/.virtualenvs/myvirtualenv/local/lib/python2.7/site-packages/ebaysdk/connection.pyc in execute(self, verb, data, list_nodes, verb_attrs, files)
117
118 self.build_request(verb, data, verb_attrs, files)
--> 119 self.execute_request()
120
121 if hasattr(self.response, 'content'):
/home/debian/.virtualenvs/goplaces/local/lib/python2.7/site-packages/ebaysdk/connection.pyc in execute_request(self)
182 proxies=self.proxies,
183 timeout=self.timeout,
--> 184 allow_redirects=True
185 )
186
/home/debian/.virtualenvs/myvirtualenv/local/lib/python2.7/site-packages/requests/sessions.pyc in send(self, request, **kwargs)
574
575 # Send the request
--> 576 r = adapter.send(request, **kwargs)
577
578 # Total elapsed time of the request (approximately)
/home/debian/.virtualenvs/myvirtualenv/local/lib/python2.7/site-packages/requests/adapters.pyc in send(self, request, stream, timeout, verify, cert, proxies)
431 except (_SSLError, _HTTPError) as e:
432 if isinstance(e, _SSLError):
--> 433 raise SSLError(e, request=request)
434 elif isinstance(e, ReadTimeoutError):
435 raise ReadTimeout(e, request=request)
SSLError: bad handshake: Error([('SSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed')],)
Есть много связанных вопросов о StackOverflow, и все они говорят:
передать аргумент verify = Falseпройти сертификат CAдобавить сертификат CA вфайл cacert.pem (Я попробовал это, не сработало)Я не могу сделать это, потому что:
запросы вызываются сторонней библиотекой, которая находится в моей виртуальной реальности.Это плохо с точки зрения безопасности.Также,
Я могу совершать другие вызовы TSL (например, API Amazon Marketplace) в том же virtualenv, используя запросы, которые не вызывают плохое рукопожатие или любые другие ошибки SSL.Ebay SDK работает нормально на моей локальной системе (Mac OsX), проблема только с моим рабочим сервером (Google Cloud / Debian)Chrome не обнаружил никаких ошибок SSL в моем доменеЯ не знаю, почему это происходит.
ЗачемSSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed'
находится в трассировке, когда я отключил SSL3. (У меня нет глубоких знаний о SSL).
Спасибо!
Редактировать:# openssl version
OpenSSL 1.0.2e 3 Dec 2015
Обновлен до openssl 1.0.2 с 1.0.1 путем сборки из исходного кода по предложению @Steffen Ullrich.
$ pip freeze | grep -i ssl
backports.ssl-match-hostname==3.4.0.2
pyOpenSSL==0.15.1