Перейти к содержимому
ecdsa.com
GNU Wget built with OpenSSL (Ubuntu 22.04+, Alpine, RHEL/CentOS)curl

Сообщение об ошибке

ERROR: cannot verify api.example.com's certificate, issued by 'CN=Example Private CA':

Также выводится как

  • Unable to locally verify the issuer's authority.

Имя хоста и отличительное имя издателя меняются от сайта к сайту. Сборки wget с GnuTLS (Debian) сообщают о том же сбое как «ERROR: The certificate of '<host>' is not trusted.»

Что это означает

Бэкенд OpenSSL в wget не смог проверить сертификат сервера; его издатель указан в кавычках после «issued by». Следующая строка с отступом, которую выводит wget, содержит причину от OpenSSL: «Unable to locally verify the issuer's authority» означает, что издателя нет в локальном пакете сертификатов CA, а сервер не отправил сертификат, который вёл бы к одному из сертификатов этого пакета. wget прерывает работу с кодом завершения 5.

Почему это происходит

Как исправить

  1. 1.

    Прочитайте строку с причиной, выведенную с отступом

    Строка под сообщением об ошибке ERROR показывает, какая из проверок OpenSSL не прошла, а значит, что исправлять: доверие, цепочку сервера или даты.

    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.

    Укажите wget сертификат CA

    Передайте корневой сертификат (или пакет сертификатов) через --ca-certificate либо задайте ca_certificate в ~/.wgetrc или /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.

    Установите корневой сертификат в системный пакет сертификатов

    wget на базе OpenSSL читает пакет сертификатов дистрибутива, поэтому корневой сертификат, добавленный туда, сразу исправляет wget, curl и большинство других инструментов на машине.

    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.

    Владельцам серверов: отдавайте полную цепочку

    Если издатель — публичный промежуточный CA, укажите в конфигурации сервера конечный сертификат, а за ним промежуточные сертификаты.

    bash
    # Server side: serve leaf + intermediates
    cat api.example.com.crt intermediate.crt > fullchain.pem
  5. 5.

    Временная диагностика: один раз пропустите проверку

    --no-check-certificate позволяет выяснить, сработает ли скачивание без проверки сертификата. Флаг принимает любой сертификат, в том числе сертификат злоумышленника, поэтому не используйте его для того, что вы запускаете или чему доверяете.

    bash
    # Diagnostic only
    wget --no-check-certificate -O /dev/null https://api.example.com/

Связанные ошибки

Открыть всю базу ошибок подписей