Код возврата 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
Способы решения: от безопасных к рискованным
Порядок действий зависит от результата диагностики. Ниже — варианты от наиболее корректных к тем, что стоит применять с осторожностью.
| Причина | Решение | Риск |
|---|---|---|
| Неверное время | Синхронизировать часы (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«на всякий случай» — это отключит проверку для всех будущих загрузок, включая те, где вы об этом забудете.
Особый случай: минимальные системы и контейнеры
Частый сценарий — ошибка 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.