Mensaje de error
ERROR: cannot verify api.example.com's certificate, issued by 'CN=Example Private CA':
También se muestra como
- Unable to locally verify the issuer's authority.
El nombre del host y el nombre distintivo del emisor cambian con cada sitio. Las compilaciones de wget con GnuTLS (Debian) informan del mismo fallo como «ERROR: The certificate of '<host>' is not trusted.»
Qué significa
El wget compilado con OpenSSL no pudo verificar el certificado del servidor, cuyo emisor aparece citado después de «issued by». La línea sangrada que wget imprime a continuación da el motivo de OpenSSL; «Unable to locally verify the issuer's authority» significa que el emisor no está en el bundle de CA local y que el servidor no envió ningún certificado que lleve hasta una CA de ese bundle. wget se interrumpe con el código de salida 5.
Por qué ocurre
El emisor es una CA privada o de la empresa
frecuenteSi el emisor citado es la CA de tu organización o la de una herramienta, como una CA de Kubernetes o de Vault, su raíz no está en el bundle público de este equipo.
El servidor omite su certificado intermedio
frecuenteSi el emisor es un intermedio público («R13», «GTS CA 1C3», «Sectigo RSA Domain Validation…»), el servidor no lo envió; sin él, OpenSSL no puede enlazar el certificado hoja con una raíz de confianza.
Un proxy que inspecciona TLS emitió el certificado
ocasionalSi en un sitio web público el nombre del emisor pertenece a un proveedor de seguridad o a tu empresa, significa que un proxy está volviendo a firmar el tráfico. Su raíz debe estar instalada en el equipo donde se ejecuta wget.
El bundle de CA está desactualizado
raraA los sistemas que llevan años sin actualizar ca-certificates les pueden faltar las raíces a las que se encadenan los certificados públicos más recientes.
Cómo solucionarlo
- 1.
Leer la línea sangrada con el motivo
La línea debajo de ERROR indica cuál de las comprobaciones de OpenSSL falló y, por tanto, si hay que corregir la confianza, la cadena del servidor o las fechas.
text ERROR: cannot verify api.example.com's certificate, issued by 'CN=Example Private CA': Unable to locally verify the issuer's authority. <- issuer unknown: CA or chain problem Self-signed certificate encountered. <- server certificate is self-signed Issued certificate has expired. <- date problem - 2.
Indicar a wget la CA
Pasa el certificado raíz (o un bundle) con --ca-certificate, o define ca_certificate en ~/.wgetrc o /etc/wgetrc.
bash wget --ca-certificate=/opt/certs/corp-root-ca.pem https://api.example.com/ echo 'ca_certificate = /opt/certs/corp-root-ca.pem' >> ~/.wgetrc - 3.
Instalar la raíz en el bundle del sistema
El wget basado en OpenSSL lee el bundle de la distribución, así que añadir ahí la raíz arregla a la vez wget, curl y la mayoría de las demás herramientas del equipo.
bash # Ubuntu / Alpine sudo cp corp-root-ca.pem /usr/local/share/ca-certificates/corp-root-ca.crt && sudo update-ca-certificates # RHEL / Fedora sudo cp corp-root-ca.pem /etc/pki/ca-trust/source/anchors/ && sudo update-ca-trust - 4.
Propietarios de servidores: servir la cadena completa
Cuando el emisor es un intermedio público, configura el servidor con el certificado hoja seguido de los certificados intermedios.
bash # Server side: serve leaf + intermediates cat api.example.com.crt intermediate.crt > fullchain.pem - 5.
Diagnóstico temporal: omitir la comprobación una sola vez
--no-check-certificate confirma si, por lo demás, la descarga funcionaría. Acepta cualquier certificado, incluido el de un atacante, así que no lo uses para nada que vayas a ejecutar o en lo que vayas a confiar.
bash # Diagnostic only wget --no-check-certificate -O /dev/null https://api.example.com/
Errores relacionados
ERROR: The certificate of 'api.example.com' is not trusted.GNU Wget built with GnuTLS (Debian, Ubuntu before 22.04 used it too)curl: (60) SSL certificate problem: unable to get local issuer certificatecurl (OpenSSL backend)verify error:num=20:unable to get local issuer certificateOpenSSL CLI (openssl s_client / openssl verify)