Solicitudes de Python obteniendo SSLerror

Intento realizar una solicitud de obtención simple utilizando la sesión de solicitudes, pero sigo recibiendo SSLerror para un sitio específico. Creo que tal vez el problema esté en el sitio (hice un escaneo usando https://www.ssllabs.com , los resultados están abajo), pero no puedo estar seguro porque no tengo conocimiento en esta área 🙂 Me gustaría para entender lo que está pasando.

Una solución / explicación sería genial, gracias!

El código:

import requests requests.get('https://www.reporo.com/') 

Me sale el siguiente error:

 SSLError: [Errno bad handshake] [('SSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed')] --------------------------------------------------------------------------- SSLError Traceback (most recent call last)  in () ----> 1 requests.get('https://www.reporo.com/') /usr/local/lib/python2.7/dist-packages/requests/api.pyc in get(url, **kwargs) 63 64 kwargs.setdefault('allow_redirects', True) ---> 65 return request('get', url, **kwargs) 66 67 /usr/local/lib/python2.7/dist-packages/requests/api.pyc in request(method, url, **kwargs) 47 48 session = sessions.Session() ---> 49 response = session.request(method=method, url=url, **kwargs) 50 # By explicitly closing the session, we avoid leaving sockets open which 51 # can trigger a ResourceWarning in some cases, and look like a memory leak /usr/local/lib/python2.7/dist-packages/requests/sessions.pyc in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json) 459 } 460 send_kwargs.update(settings) --> 461 resp = self.send(prep, **send_kwargs) 462 463 return resp /usr/local/lib/python2.7/dist-packages/requests/sessions.pyc in send(self, request, **kwargs) 571 572 # Send the request --> 573 r = adapter.send(request, **kwargs) 574 575 # Total elapsed time of the request (approximately) /usr/local/lib/python2.7/dist-packages/requests/adapters.pyc in send(self, request, stream, timeout, verify, cert, proxies) 429 except (_SSLError, _HTTPError) as e: 430 if isinstance(e, _SSLError): --> 431 raise SSLError(e, request=request) 432 elif isinstance(e, ReadTimeoutError): 433 raise ReadTimeout(e, request=request) SSLError: [Errno bad handshake] [('SSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed')] 

Ejecuté un escaneo en https://www.ssllabs.com y obtuve lo siguiente:

 SSL Report: reporo.com Assessed on: Sun Feb 22 21:42:57 PST 2015 | Clear cache Scan Another >> Server Domain(s) Test time Grade 1 154.51.128.13 Certificate not valid for domain name reporo.com Sun Feb 22 21:40:53 PST 2015 Duration: 9.167 sec - 2 198.12.15.168 protected.ddosdefend.com Ready www.reporo.com Sun Feb 22 21:41:02 PST 2015 Duration: 115.189 sec F 

El certificado en sí para http://www.reporo.com (no reporo.com) es válido, pero falta un certificado en cadena como se muestra en el informe de ssllabs :

 Chain issues Incomplete .... 2 Extra download Thawte DV SSL CA Fingerprint: 3ca958f3e7d6837e1c1acf8b0f6a2e6d487d6762 

El “incompleto” y la “descarga adicional” son los puntos principales. Algunos navegadores tendrán el certificado de cadena faltante en la memoria caché, otros harán la descarga y otros fallarán. Si prueba el sitio con un nuevo perfil de Firefox (que no tiene ningún certificado en caché), también fallará.

Puede descargar los certificados de cadena que faltan y usarlos como certificado de CA de confianza con el parámetro de verify para las solicitudes. No solo desactive la validación, ya que estará abierto a los ataques de intermediarios.

Instrucciones paso a paso:

Puede deshabilitar la verificación de certificado:

 requests.get('https://www.reporo.com/', verify=False) 

pero sin la verificación del certificado no hay protección contra ataques de hombre en el medio .

Yo tenía el mismo error. La degradación de las solicitudes de pedidos-2.17.3 a pedidos-2.11.0 lo resolvió por mí.

 pip uninstall requests pip install requests==2.11.0 

Se encontró con un problema similar y se solucionó siguiendo:

 pip install -U requests[security]