Solucionar error HTTPSConnectionPool Max retries exceeded Caused by SSLError SSLCertVerificationError CERTIFICATE_VERIFY_FAILED certificate verify failed self signed certificate in certificate chain que se produce al ejecutar una aplicación Python que accede a un recurso web HTTPS.
- Error HTTPSConnectionPool Max retries exceeded Caused by SSLError SSLCertVerificationError CERTIFICATE_VERIFY_FAILED certificate verify failed self signed certificate in certificate chain en Python.
- Solución rápida al error SSLError SSLCertVerificationError CERTIFICATE_VERIFY_FAILED en Python.
- Solución más segura al error SSLError SSLCertVerificationError CERTIFICATE_VERIFY_FAILED en Python.
Error HTTPSConnectionPool Max retries exceeded Caused by SSLError SSLCertVerificationError CERTIFICATE_VERIFY_FAILED certificate verify failed self signed certificate in certificate chain en Python
Cuando desarrollamos un script/app en el lenguaje de programación Python que accede a algún recurso web por HTTPS (puerto 443 o TLS) mediante la librería requests (por ejemplo para el acceso al API de DeepSeek), y recibimos este error:
Error inesperado: Error de conexión: HTTPSConnectionPool(host=’api.deepseek.com’, port=443): Max retries exceeded with url: /v1/chat/completions (Caused by SSLError(SSLCertVerificationError(1, ‘[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:992)’)))

El motivo es que en nuestra organización hay algún tipo de sistema de seguridad perimetral o de endpoint que analiza el tráfico HTTPS. Este tipo de sistemas suele usar un certificado propio para romper el túnel HTTPS, analizar el tráfico y volver a montar el túnel. Si no disponemos de este certificado, podremos recibir el error que indicamos.
Solución rápida al error SSLError SSLCertVerificationError CERTIFICATE_VERIFY_FAILED en Python
A continuación mostramos una solución rápida el error SSLCertVerificationError , aunque no es la mejor ni la más segura, dado que desactivaremos la comprobación de certificado HTTPS. Para ello, en el código Python donde realicemos la conexión al recurso web mediante requests, agregaremos el parémtro «verify», con valor «False». Por ejemplo, si tenemos este código Python de conexión a un recurso web:
try:
response = requests.post(API_URL, headers=encabezado, data=json.dumps(datos))
response.raise_for_status() # Lanza una excepción si la solicitud no fue correcta
return response.json()
except requests.exceptions.HTTPError as e:
if response.status_code == 401:
raise Exception("Error de autenticación: API key no válida")
elif response.status_code == 429:
raise Exception("Límite de tasa excedido: Demasiadas solicitudes")
else:
raise Exception(f"Error HTTP: {str(e)}")
except requests.exceptions.ConnectionError as e:
raise Exception(f"Error de conexión: {str(e)}")
except requests.exceptions.Timeout as e:
raise Exception(f"Tiempo de espera agotado: {str(e)}")
except requests.exceptions.RequestException as e:
raise Exception(f"Error en la solicitud: {str(e)}")