Сообщение об ошибке
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.
Почему это происходит
Издатель — частный или корпоративный CA
частоЕсли указанный издатель — CA вашей организации или какого-либо инструмента, например CA Kubernetes или Vault, его корневого сертификата нет в публичном пакете сертификатов на этой машине.
Сервер не отправляет свой промежуточный сертификат
частоЕсли издатель — публичный промежуточный CA («R13», «GTS CA 1C3», «Sectigo RSA Domain Validation…»), значит, сервер не отправил его сертификат; без него OpenSSL не может связать конечный сертификат с доверенным корневым.
Сертификат выпущен прокси с инспекцией TLS
иногдаЕсли у публичного сайта издатель принадлежит производителю средств защиты или вашей компании, значит, прокси переподписывает трафик. Корневой сертификат этого прокси должен быть установлен на машине, где запускается wget.
Пакет сертификатов CA устарел
редкоВ системах, где пакет ca-certificates годами не обновлялся, может не быть корневых сертификатов, к которым ведут цепочки новых публичных сертификатов.
Как исправить
- 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.
Укажите 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.
Установите корневой сертификат в системный пакет сертификатов
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.
Владельцам серверов: отдавайте полную цепочку
Если издатель — публичный промежуточный CA, укажите в конфигурации сервера конечный сертификат, а за ним промежуточные сертификаты.
bash # Server side: serve leaf + intermediates cat api.example.com.crt intermediate.crt > fullchain.pem - 5.
Временная диагностика: один раз пропустите проверку
--no-check-certificate позволяет выяснить, сработает ли скачивание без проверки сертификата. Флаг принимает любой сертификат, в том числе сертификат злоумышленника, поэтому не используйте его для того, что вы запускаете или чему доверяете.
bash # Diagnostic only wget --no-check-certificate -O /dev/null https://api.example.com/
Связанные ошибки
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)