Error de SSL con las solicitudes de Python a pesar de las dependencias actualizadas

Recibo un error de SSL de “mal saludo”. Las respuestas más similares a este problema parecen provenir de bibliotecas antiguas, 1024bit cert. incompatibilidad, etc … Creo que estoy al día, y no puedo entender por qué estoy recibiendo este error.

PREPARAR:

  • peticiones 2.13.0
  • certifi 2017.01.23
  • ‘OpenSSL 1.0.2g 1 Mar 2016’

Estoy golpeando esta API (clave de certificado de 2048 bits): https://api.sidecar.io/rest/v1/provision/application/device/count/

Y obteniendo este error: requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)

Consulte la L.44 de https://github.com/sidecar-io/sidecar-python-sdk/blob/master/sidecar.py

Si vuelvo a verify=False en las solicitudes, puedo omitirlo, pero preferiría averiguar por qué la certificación está fallando.

Cualquier ayuda es muy apreciada; ¡Gracias!

La validación falla porque el servidor al que accede no se ha configurado correctamente, es decir, no es un error de su configuración o código. Mirando el reporte de SSLLabs que ves

La cadena de certificados de este servidor está incompleta. Grado limitado a B.

Esto significa que el servidor envía una cadena de certificado a la que le falta un certificado intermedio a la raíz de confianza y, por lo tanto, su cliente no puede construir la cadena de confianza. La mayoría de los navegadores de escritorio solucionan este problema al intentar obtener el certificado faltante en otro lugar, pero las bibliotecas TLS normales fallarán en este caso. Necesitaría agregar explícitamente el certificado de cadena faltante como confiable para solucionar este problema:

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

mycerts.pem debe contener el certificado intermedio faltante y el certificado raíz de confianza. Puede encontrar una versión probada para mycerts.pem en http://pastebin.com/aZSKfyb7 .

Esto puede ayudar como solución para su problema.

 print(requests.get(url, proxies,verify = False))