curl: SSL certificate problem: unable to get local issuer certificate

  • Обновлено
  • Чтение ≈ 4 минуты
  • Нужны права администратора

Краткий ответ

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

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение
  4. Если не помогло
  5. Диагностика
  6. Клиент
  7. Сервер и прокси

#Что означает ошибка

60
curl: (60) SSL certificate problem: unable to get local issuer certificate

curl: (60) SSL certificate problem: unable to get local issuer certificate (или self-signed certificate, certificate has expired) означает, что curl не смог проверить сертификат сервера. Причины: устаревший или отсутствующий пакет CA, неполная цепочка на сервере, самоподписанный сертификат, перехват трафика прокси, неверное время.

Ключ -k отключает проверку и не должен использоваться вместо исправления.

Найдите причину с помощью подробного вывода.

curl не доверяет сертификату сайта: отсутствуют корневые сертификаты в системе, сервер не отдаёт промежуточные сертификаты либо трафик перехватывается. Не отключайте проверку без необходимости.

#Причины и решения

Возможная причинаКак узнатьЧто делать
Нет пакета ca-certificatesМинимальная система.Установите.
Устаревшие корневые сертификатыДавно не обновляли.Обновите.
Сервер без цепочкиТолько один сайт.Владельцу: исправить.
Перехват трафикаКорпоративный прокси.Добавьте корневой сертификат.

#Пошаговое решение

  1. Запустите curl -vНа Linux/macOS откройте «Терминал» и выполните curl -vI https://example.com/, заменив адрес своим сайтом. В Windows используйте curl.exe -vI https://example.com/ в PowerShell, чтобы исключить различия псевдонимов. Смотрите строки с ошибкой проверки сертификата и цепочкой доверия, но не вводите -k или --insecure: они скрывают проблему. Если ошибка проявляется только на клиенте, сравните установленный набор доверенных центров; если у всех — проверяйте конфигурацию сервера.
  2. Проверьте сертификат openssl s_clientВ браузере откройте сайт, нажмите значок сведений о соединении возле адреса и посмотрите информацию о сертификате (название меню зависит от браузера). Сравните доменное имя в сертификате, срок действия и название издателя с адресной строкой. При предупреждении о недоверенном сертификате не нажимайте обход предупреждения и не отправляйте пароли; администратору сайта передайте точный текст ошибки и имя домена. Если проблема только в корпоративной сети, уточните у администратора политику доверия.
  3. Проверьте полную цепочку на сервереАдминистратору своего HTTPS-сервера: в терминале выполните openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null с реальным доменом. Посмотрите, передаётся ли промежуточный сертификат и нет ли Verify return code с ошибкой проверки. Публичный сайт можно дополнительно проверить в SSL Labs. При недостающей цепочке настройте на сервере корректный файл fullchain от издателя и проверьте синтаксис конфигурации; посетитель не должен добавлять непонятный сертификат в доверенные.
  4. Обновите ca-certificates на клиентеТолько если сертификат сервера проверен и выяснилось, что у конкретного Linux-клиента устарели доверенные корни: в Debian/Ubuntu выполните sudo apt update и sudo apt install --only-upgrade ca-certificates, затем sudo update-ca-certificates. Для других дистрибутивов используйте их штатный менеджер пакетов. Повторите curl -I https://example.com/ без -k. Если ошибка остаётся у нескольких независимых клиентов, вероятнее неполная цепочка на самом сервере.
    Linux · Терминал (Bash)КомандаНужен sudo
    Обновление хранилища сертификатов.
    sudo update-ca-certificates
  5. Добавьте свой CA вместо -kВнутренний сервер с собственным центром сертификации допускает явное доверие только проверенному по независимому каналу CA. Администратор должен передать сертификат центра, а не закрытый ключ, и подтвердить его отпечаток. Для разового теста можно выполнить curl --cacert /путь/к/проверенному-ca.pem -I https://internal.example/, заменив оба пути на реальные. Не используйте curl -k и не добавляйте неизвестные CA в системное хранилище: это ослабляет защиту всех HTTPS-соединений.

#Если не помогло

Параметр -k (--insecure) отключает проверку сертификата и допустим только для отладки.

#Диагностика

Выполните curl -v https://host и посмотрите блок SSL certificate verify. Проверьте сертификат: echo | openssl s_client -connect host:443 -servername host 2>/dev/null | openssl x509 -noout -issuer -subject -dates. Проверьте цепочку на SSL Labs: сообщение «Chain issues: Incomplete» — на сервере не хватает промежуточного сертификата. Проверьте дату на своей машине.

#Клиент

Обновите CA: Debian/Ubuntu — sudo apt install --reinstall ca-certificates && sudo update-ca-certificates; RHEL/Rocky — sudo dnf reinstall ca-certificates && sudo update-ca-trust; Windows — обновите систему и корневые сертификаты. Для собственного CA добавьте его: скопируйте .crt в /usr/local/share/ca-certificates/ и update-ca-certificates (Debian) либо /etc/pki/ca-trust/source/anchors/ и update-ca-trust (RHEL). Разово: curl --cacert ca.pem https://host.

#Сервер и прокси

Владелец сервера должен отдавать полную цепочку: в nginx ssl_certificate fullchain.pem. Самоподписанные сертификаты для публичных сервисов замените на Let's Encrypt. За корпоративным прокси экспортируйте корневой сертификат организации и укажите CURL_CA_BUNDLE или --cacert. Не используйте curl -k в скриптах: так вы теряете защиту от подмены. Для тестов на своём стенде допустимо, но осознанно.

Linux · Терминал (Bash)Команда
Подробный вывод curl и данные сертификата сервера.
curl -v https://example.com
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -issuer -subject -dates

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 1 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.