SSLError: aperto de mão ruim, solicitações de Python
Estou consumindoAPIs de negociação do Ebay usandoEbay python sdk que é eventualmente cantarrequisições python para fazer chamadas de API.
Tudo estava funcionando bem, mas desde os últimos dias não consigo ligar. Estou recebendo erro:
SSLError: bad handshake: Error([('SSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed')],)
Aqui está o rastreamento completo:
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')],)
Há muitas perguntas relacionadas no StackOverflow, e tudo o que diz:
passar argumento verificar = Falsopassar certificado CAanexar seu certificado CA emarquivo cacert.pem (Eu tentei isso, não funcionou)Não posso fazer isso porque:
pedidos está sendo chamado pela biblioteca de terceiros que está no meu ambiente virtual.Isso é ruim no ponto de vista da segurança.Além disso,
Sou capaz de fazer outras chamadas TSL (por exemplo, Amazon marketplace apis) na mesma virtualenv usando solicitações, o que não causa mau aperto de mão ou qualquer outro erro SSL.O SDK do Ebay está funcionando bem no meu sistema local (Mac OsX), o problema está apenas no meu servidor de produção (Google Cloud / Debian)Não há erros de SSL relatados pelo chrome no meu domínioNão sei por que isso está acontecendo.
Por quêSSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed'
está em rastreamento, quando desativei o SSL3. (Eu não tenho conhecimento profundo sobre SSL).
Obrigado!
Editar:# openssl version
OpenSSL 1.0.2e 3 Dec 2015
Atualizei para openssl 1.0.2 a partir de 1.0.1 construindo a partir do código-fonte após a sugestão de @Steffen Ullrich.
$ pip freeze | grep -i ssl
backports.ssl-match-hostname==3.4.0.2
pyOpenSSL==0.15.1