Saltar al contenido
ecdsa.com
GNU Wget built with OpenSSL (Ubuntu 22.04+, Alpine, RHEL/CentOS)curl

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

Cómo solucionarlo

  1. 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. 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. 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. 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. 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

Explorar toda la base de datos de errores de firma