Код возврата 5 у wget означает однозначную вещь: загрузка прервалась на этапе проверки SSL-сертификата удалённого сервера — утилита не смогла подтвердить подлинность HTTPS-соединения. Это не сетевая ошибка и не проблема с самим файлом: TCP-соединение установлено, TLS-рукопожатие началось, но цепочка доверия к сертификату не выстроилась, и wget по соображениям безопасности отказался продолжать.

Типичные сообщения, сопровождающие этот код, выглядят как «ERROR: cannot verify example.com's certificate» или «certificate has expired». Ниже разберём, почему возникает сбой, как отличить локальную проблему от проблемы на стороне сервера и какие действия безопасны, а какие — нет.

Что означает код выхода 5 у wget

Утилита wget возвращает числовой код завершения, который можно проверить командой echo $? сразу после выполнения. Код 0 — успех, а ненулевые значения классифицируют тип сбоя. Код 5 зарезервирован именно за ошибками верификации SSL: сертификат просрочен, самоподписан, выпущен для другого домена, либо система не смогла найти доверенный корневой центр сертификации для проверки цепочки.

Важно понимать: wget ведёт себя корректно. Отказ от загрузки при невалидном сертификате — это защита от подмены сервера и перехвата трафика. Поэтому задача — не «заставить wget молчать», а выяснить, почему проверка не проходит.

💡

Код выхода 5 у wget всегда связан с проверкой SSL-сертификата. Сначала диагностируйте причину, и только потом решайте, как её устранить.

Основные причины ошибки

Причин несколько, и они делятся на две группы: проблемы на стороне вашей системы и проблемы на стороне сервера. Определить группу — первый шаг диагностики.

  • Неверное системное время. Если часы компьютера отстают или спешат, действующий сертификат может выглядеть как просроченный или ещё не вступивший в силу.
  • 📦 Устаревшее хранилище корневых сертификатов. На старых системах может отсутствовать корневой CA, которым подписан сертификат сайта.
  • 🔗 Неполная цепочка на сервере. Администратор сервера не отдаёт промежуточный сертификат — браузеры достраивают цепочку сами, а wget нет.
  • ✍️ Самоподписанный сертификат. Типично для внутренних корпоративных ресурсов и тестовых стендов.
  • 🌐 Несовпадение имени хоста. Сертификат выпущен для другого домена, а вы обращаетесь по IP или по иному имени.
⚠️ Внимание: если ошибка возникает на обычном публичном сайте, который в браузере открывается без предупреждений, почти наверняка проблема локальная — проверяйте время и пакет сертификатов, а не ищите обходные пути.

Диагностика: как найти конкретную причину

Начните с проверки системного времени — это самая частая и самая просто устраняемая причина. Выполните команду date и сравните вывод с реальным временем. Расхождение даже в несколько дней способно «испортить» валидный сертификат.

Далее посмотрите, что именно говорит wget при запуске с ключом -v (подробный вывод), и проверьте сертификат напрямую через OpenSSL:

openssl s_client -connect example.com:443 -servername example.com

В выводе ищите строки Verify return code и даты notBefore / notAfter. Код 0 (ok) означает, что система сертификату доверяет; любое другое значение укажет конкретную проблему — истёкший срок, неизвестный издатель, несовпадение имени.

☑️ Быстрая диагностика wget returned 5

Выполнено: 0 / 5

Способы решения: от безопасных к рискованным

Порядок действий зависит от результата диагностики. Ниже — варианты от наиболее корректных к тем, что стоит применять с осторожностью.

ПричинаРешениеРиск
Неверное времяСинхронизировать часы (NTP)Нет
Устаревшие корневые CAОбновить пакет ca-certificatesНет
Неполная цепочка на сервереСообщить администратору сервераНет
Самоподписанный сертификат (свой сервер)Добавить сертификат в доверенные или --no-check-certificateСредний
Чужой сайт с невалидным сертификатомНе загружать; искать зеркало/HTTPS-альтернативу

Обновление хранилища сертификатов в дистрибутивах на базе Debian/Ubuntu выполняется так:

sudo apt update && sudo apt install --reinstall ca-certificates

sudo update-ca-certificates

Для RHEL-подобных систем пакет тоже называется ca-certificates и обновляется через dnf или yum. Точные команды зависят от дистрибутива — сверяйтесь с его документацией.

💡

Если ошибка возникает только на одном конкретном сервере, а остальные HTTPS-загрузки работают — проблема почти наверняка на стороне этого сервера, и чинить свою систему бессмысленно.

Про --no-check-certificate: когда допустимо, а когда опасно

Ключ --no-check-certificate отключает проверку SSL и «лечит» ошибку мгновенно — именно поэтому его так часто советуют. Но этот флаг отключает защиту от подмены сервера, и применять его к чужим публичным ресурсам небезопасно: вы не сможете отличить реальный сервер от перехватывающего прокси.

Оправданное применение — загрузка с собственного тестового сервера или внутреннего корпоративного ресурса с самоподписанным сертификатом, когда вы контролируете обе стороны соединения. Даже в этом случае лучше добавить свой сертификат в доверенное хранилище, чем глобально отключать проверку.

⚠️ Внимание: никогда не используйте --no-check-certificate при загрузке исполняемых файлов, скриптов или пакетов, которые затем будут запущены в системе. Скомпрометированная загрузка превратится в выполнение чужого кода.
⚠️ Внимание: не прописывайте check-certificate = off в файл ~/.wgetrc «на всякий случай» — это отключит проверку для всех будущих загрузок, включая те, где вы об этом забудете.
📊 Где возникла ошибка wget returned 5?
На публичном сайте в интернете
На внутреннем корпоративном ресурсе
В Docker-контейнере или минимальной системе
На старом сервере/старом дистрибутиве

Особый случай: минимальные системы и контейнеры

Частый сценарий — ошибка 5 в свежеразвёрнутом Docker-контейнере или на минимальной установке сервера. Причина почти всегда одна: пакет ca-certificates просто не установлен, и системе физически нечем проверять цепочку. Установка пакета полностью решает проблему без каких-либо обходных флагов.

На устаревших системах возможна обратная ситуация: хранилище сертификатов давно не обновлялось, и современные корневые CA в нём отсутствуют. Если обновить пакеты невозможно, корректный путь — вручную добавить нужный корневой сертификат, полученный из доверенного источника, а не отключать проверку целиком.

Почему браузер открывает сайт, а wget — нет

Браузеры умеют автоматически доставлять недостающие промежуточные сертификаты (AIA fetching) и используют собственное хранилище корневых CA. wget опирается только на системное хранилище и не достраивает цепочку, поэтому неправильно настроенный сервер вызывает ошибку 5 именно в wget.

FAQ: частые вопросы

Ошибка wget returned 5 опасна для системы?

Сама по себе — нет, это защитная реакция. Опасность представляет не ошибка, а её «устранение» через отключение проверки сертификатов при загрузке из недоверенных источников.

Время на компьютере правильное, но ошибка остаётся. Что дальше?

Проверьте сертификат через openssl s_client и обновите пакет ca-certificates. Если ошибка только на одном сайте — вероятно, проблема в конфигурации самого сервера.

Можно ли использовать --no-check-certificate для своего сервера?

Да, если вы контролируете обе стороны и понимаете риск. Более правильный вариант — добавить самоподписанный сертификат в доверенное хранилище системы.

Почему в Docker-контейнере wget выдаёт код 5 на любой HTTPS-адрес?

В минимальных образах часто отсутствует пакет ca-certificates. Установите его через пакетный менеджер базового образа — проверка заработает без дополнительных настроек.

Как проверить, что ошибка решена?

Повторите команду wget и затем выполните echo $?. Код 0 означает успешную загрузку с пройденной проверкой сертификата.

💡

Правильная стратегия при wget returned 5: проверить время → обновить ca-certificates → проверить сертификат через openssl → и только в контролируемой среде рассматривать --no-check-certificate.