Watch at EaseHistorias. Respuestas. Perspectiva.

Tecnología · GUÍA PRÁCTICA

Python SSLCertVerificationError: identifica al dueño del certificado antes de cambiar la confianza

Mantén la verificación activa. Registra nombre solicitado, SNI, SAN del par, emisor, proxy y CA realmente usada; corrige solo al dueño del fallo.

Original diagram tracing a Python HTTPS request from URL and CA bundle through SNI and proxy to peer certificate SANs and issuer.
Ilustración original: registra cliente, ruta TLS e identidad antes de cambiar confianza. Watch at Ease

SSLCertVerificationError es un veredicto, no una causa única. Puede señalar cadena no confiable, vencimiento, reloj, nombre, URL con IP, host virtual, proxy HTTPS o una CA que el proceso no cargó.

El primer paso seguro no es verify=False. Reproduce desde el mismo proceso y red; registra a quién se pidió, quién respondió, qué identidad declaró y qué almacén usó el cliente.

Congela la solicitud exacta

Registra URL y puerto completos, versiones de Python/OpenSSL y biblioteca, variables de proxy, configuración de verify o CA y la excepción completa. No reduzcas la prueba a CERTIFICATE_VERIFY_FAILED.

Reproduce desde la misma identidad de proceso y ruta de red. Navegador, curl, contenedor, tarea y entorno virtual pueden usar proxies o almacenes distintos.

Nombra el endpoint antes de mirar la cadena

Anota por separado host de URL, IP conectada, nombre SNI y encabezado HTTP Host. Normalmente coinciden; una URL con IP, túnel proxy o adaptador personalizado puede separarlos.

La selección del certificado y la validación del nombre ocurren antes de HTTP. Cambiar solo Host no convierte una identidad TLS para IP en un nombre DNS.

Clasifica el fallo de verificación

Si hay discordancia de nombre, compara el nombre esperado con subjectAltName; añadir una CA no crea un nombre ausente. Para errores de cadena, revisa emisor y CA cargada; para fechas, también el reloj del proceso.

Si el emisor pertenece a un producto corporativo y no al origen, confirma que el proxy HTTPS aprobado está activo. Confiar en esa CA es una decisión de política del entorno administrado.

Aplica una reparación del dueño correcto

Corrige el servidor si falta el DNS en SAN; la URL o SNI si el cliente pidió otra identidad; el proxy o su CA aprobada solo si es el dueño previsto; y la configuración de biblioteca si el proceso no cargó la CA.

Cambia una sola cosa y conserva verify=True. Limita una CA privada a una Session o PoolManager dedicado, sin ampliar la confianza global.

Prueba éxito y rechazo

Repite la solicitud y registra subject, SAN, emisor, nombre esperado, origen de CA y estado del proxy. Confirma que la respuesta pertenece al servicio previsto.

Añade una prueba negativa con nombre incorrecto, raíz no aprobada o ruta sin proxy que deba fallar. La reparación termina solo si ese rechazo permanece.

Original decision diagram separating hostname ownership from certificate-chain ownership while verification remains enabled.
Ilustración original: el nombre y la cadena tienen dueños de reparación distintos. Watch at Ease