SSLError: mal apretón de manos, solicitudes de Python
Estoy consumiendoAPI de comercio de Ebay utilizandoEbay python sdk que eventualmente es cantarsolicitudes de python para hacer llamadas API.
Todo funcionaba bien, pero desde los últimos días no puedo hacer una llamada. Recibo un error:
SSLError: bad handshake: Error([('SSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed')],)
Aquí está el rastreo 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')],)
Hay muchas preguntas relacionadas con StackOverflow, todas las cuales dicen:
pasar argumento verificar = falsopasar el certificado de CAadjunte su certificado de CA enarchivo cacert.pem (Intenté esto, no funcionó)No puedo hacer esto porque:
las solicitudes están siendo llamadas por una biblioteca de terceros que está en mi virtualenvirinent.Esto es malo desde el punto de vista de la seguridad.También,
Puedo hacer otras llamadas TSL (por ejemplo, Amazon marketplace apis) en el mismo virtualenv usando solicitudes, lo que no causa un mal apretón de manos o cualquier otro error SSL.Ebay SDK funciona bien en mi sistema local (Mac OsX), el problema es solo con mi servidor de producción (Google Cloud / Debian)No hay errores de SSL informados por Chrome en mi dominioNo sé por qué sucede esto.
Por quéSSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed'
está en rastreo, cuando he desactivado SSL3. (No tengo un conocimiento profundo sobre SSL).
¡Gracias!
Editar:# openssl version
OpenSSL 1.0.2e 3 Dec 2015
Se actualizó a openssl 1.0.2 desde 1.0.1 construyendo desde la fuente después de la sugerencia de @Steffen Ullrich.
$ pip freeze | grep -i ssl
backports.ssl-match-hostname==3.4.0.2
pyOpenSSL==0.15.1