Skip to content
EN

curl (77) problem with the SSL CA cert

Коротко:

curl exits with 77 (CURLE_SSL_CACERT_BADFILE), когда указанный CA-bundle файл не найден или не читаем. 3 причины: (1) отсутствует /etc/ssl/certs/ca-certificates.crt — не установлен пакет ca-certificates, (2) в container (alpine, scratch) CA-bundle отсутствует, (3) environment variable CURL_CA_BUNDLE указывает на несуществующий файл.

Ниже: подробности, пример, связанные, FAQ.

Проверить SSL своего сайта →

Детали

  • Default bundle путь: /etc/ssl/certs/ca-certificates.crt (Debian), /etc/pki/tls/certs/ca-bundle.crt (RHEL)
  • Alpine: apk add ca-certificates; затем update-ca-certificates
  • Docker scratch: копируй bundle из распакованного образа
  • --cacert /path/to/ca.pem — per-request override
  • -k / --insecure skip verify — только для debug, НЕ production

Пример

# Debian/Ubuntu: установить bundle
$ apt-get install ca-certificates

# Alpine (Docker)
$ apk add --no-cache ca-certificates
$ update-ca-certificates

# Debug — какой bundle curl видит
$ curl -v https://example.com 2>&1 | grep -i "CAfile\|CApath"

# Дефолт через env
$ export CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt

Связанные

TL;DR: Что такое ошибка curl 77?

Ошибка curl error 77 возникает, когда cURL не может получить доступ к файлу сертификата CA, необходимому для проверки SSL-соединения. Это может произойти из-за неправильного пути к файлу сертификата, отсутствия самого файла или недостаточных прав доступа. Для решения проблемы проверьте путь к файлу сертификата в конфигурации cURL и убедитесь, что файл доступен и имеет корректные разрешения.

Причины возникновения ошибки curl 77

Ошибка curl error 77 может возникнуть по нескольким причинам, связанным с настройками SSL и сертификатами. Вот основные из них:

  • Неправильный путь к файлу сертификата: cURL ожидает, что файл сертификата CA будет находиться в определенном месте. Если путь указан неверно, cURL не сможет его найти.
  • Отсутствие файла сертификата: Если файл сертификата CA отсутствует на сервере, cURL не сможет выполнить проверку SSL.
  • Неправильные права доступа: Если cURL не имеет прав на чтение файла сертификата, это также может привести к ошибке 77.
  • Проблемы с форматированием сертификата: Если файл сертификата поврежден или не в правильном формате, это может вызвать ошибку.

Для успешной работы cURL важно, чтобы система могла правильно находить и использовать файл сертификата CA, который необходим для проверки подлинности SSL-соединений.

Как исправить ошибку curl 77: практический пример

Чтобы устранить ошибку curl error 77, необходимо проверить и, если необходимо, обновить конфигурацию cURL. Следуйте этим шагам:

  1. Проверьте путь к файлу сертификата: Убедитесь, что путь к файлу сертификата указан правильно. Для этого можно использовать команду:
curl --cacert /path/to/cacert.pem https://example.com

Замените /path/to/cacert.pem на фактический путь к вашему файлу сертификата.

  1. Проверьте наличие файла сертификата: Убедитесь, что файл существует по указанному пути. Используйте команду:
ls -l /path/to/cacert.pem

Если файл отсутствует, вам необходимо его загрузить или создать.

  1. Убедитесь, что файл доступен: Проверьте права доступа к файлу сертификата. Используйте команду:
chmod 644 /path/to/cacert.pem

Эта команда установит права чтения для всех пользователей, что позволит cURL получить доступ к файлу.

  1. Проверьте формат сертификата: Убедитесь, что файл сертификата имеет правильный формат. Вы можете использовать команду:
openssl x509 -in /path/to/cacert.pem -text -noout

Если команда выдаст ошибку, это может означать, что файл поврежден или не в формате PEM.

После выполнения этих шагов попробуйте снова выполнить команду cURL. Если ошибка все еще возникает, возможно, стоит обновить cURL до последней версии, так как в более новых версиях могут быть исправлены известные проблемы с сертификатами.

TL;DR: Как исправить ошибку curl 77

Ошибка curl error 77 указывает на проблему с файлом сертификата CA, необходимым для установления безопасного соединения. Обычно это связано с отсутствием или недоступностью файла ca-certificates.crt или его неправильной конфигурацией. Для решения проблемы убедитесь, что файл сертификатов CA доступен и правильно указан в конфигурации cURL, используя команду curl --cacert /path/to/ca-certificates.crt для указания пути к файлу.

Проблемы с сертификатами и их влияние на cURL

Ошибка curl error 77 возникает, когда cURL не может найти или получить доступ к файлу сертификата CA, который необходим для проверки подлинности SSL-соединений. В большинстве случаев это связано с неправильной конфигурацией или отсутствием файла сертификатов. Важно отметить, что cURL использует пакет ca-certificates, который содержит список доверенных корневых сертификатов, необходимых для установления безопасных соединений.

Чтобы проверить, установлен ли пакет ca-certificates, можно использовать следующие команды в зависимости от вашей операционной системы:

  • dpkg -l | grep ca-certificates для систем на базе Debian/Ubuntu
  • rpm -qa | grep ca-certificates для систем на базе Red Hat/CentOS

Если пакет не установлен, его можно установить с помощью следующих команд:

  • sudo apt-get install ca-certificates для Debian/Ubuntu
  • sudo yum install ca-certificates для Red Hat/CentOS

После установки пакета необходимо убедиться, что файл ca-certificates.crt доступен в стандартных директориях, таких как /etc/ssl/certs/ или /usr/local/share/ca-certificates/. Вы можете проверить наличие файла с помощью команды:

ls /etc/ssl/certs/ca-certificates.crt

Если файл отсутствует, его можно обновить или восстановить, используя команду:

sudo update-ca-certificates

Это обновит список сертификатов и создаст файл ca-certificates.crt, если он отсутствует.

Также стоит обратить внимание на права доступа к файлу сертификата. Убедитесь, что у пользователя, под которым запускается cURL, есть необходимые права на чтение файла. Для проверки прав доступа используйте команду:

ls -l /etc/ssl/certs/ca-certificates.crt

Если права ограничены, их можно изменить с помощью команды:

sudo chmod 644 /etc/ssl/certs/ca-certificates.crt

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

curl -I https://example.com

Если ошибка curl error 77 больше не возникает, значит, проблема решена. В противном случае стоит проверить конфигурацию cURL и убедиться, что путь к файлу сертификата указан правильно. Для этого можно использовать опцию --cacert, чтобы явно указать путь к файлу сертификатов при выполнении запроса:

curl --cacert /path/to/ca-certificates.crt -I https://example.com

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

СертификатСрок, издатель, домены (SAN)
ЦепочкаПроверка промежуточных и корневых CA
TLS-протоколВерсия TLS и набор шифров
УязвимостиHeartbleed, POODLE, слабые шифры

Почему нам доверяют

TLS 1.3
поддержка
Полная
цепочка CA
<2с
результат
30/14/7
дней до истечения

Как это работает

1

Введите домен

2

Проверка цепочки TLS

3

Дата истечения и уязвимости

Что проверяет SSL-тест?

SSL/TLS — протокол шифрования, который защищает данные между браузером и сервером. Наш инструмент анализирует сертификат, цепочку доверия, версию TLS и известныеуязвимости.

Детали сертификата

Издатель, срок действия, алгоритм подписи, покрываемые домены (SAN) и тип валидации (DV/OV/EV).

Цепочка доверия

Проверка полной цепочки: от конечного сертификата через промежуточные до корневого CA.

Анализ TLS

Версия протокола (TLS 1.2/1.3), набор шифров, поддержка Perfect Forward Secrecy (PFS).

Оповещения об истечении

Создайте монитор — получайте уведомления в Telegram и email за 30/14/7 дней до истечения.

DV vs OV vs EV сертификаты

DV (Domain Validation)
  • Подтверждение только владения доменом
  • Выдаётся за минуты автоматически
  • Бесплатно через Let's Encrypt
  • Подходит для большинства сайтов
  • Самый распространённый тип
OV / EV
  • Проверка организации (OV) или расширенная проверка (EV)
  • Выдаётся за 1-5 рабочих дней
  • Стоимость от $50 до $500/год
  • Для финансов, e-commerce, госсайтов
  • Повышает доверие пользователей

Кому это нужно

DevOps

мониторинг SSL-сертификатов

Безопасность

аудит TLS-конфигурации

SEO

HTTPS как фактор ранжирования

E-commerce

доверие покупателей

Частые ошибки

Истёкший сертификатБраузеры блокируют сайт с истёкшим SSL. Настройте автопродление или мониторинг.
Неполная цепочка сертификатовБез промежуточного CA некоторые браузеры и боты не смогут верифицировать сертификат.
Mixed content на HTTPS-сайтеHTTP-ресурсы на HTTPS-странице — замок в браузере пропадает, снижается доверие.
Использование TLS 1.0/1.1Устаревшие версии TLS содержат известные уязвимости. Используйте TLS 1.2+ или 1.3.
Несовпадение домена в сертификатеСертификат должен покрывать все домены сайта, включая www и поддомены.

Лучшие практики

Настройте автопродлениеLet's Encrypt + certbot с cron — сертификат обновляется автоматически каждые 60-90 дней.
Включите HSTSЗаголовок Strict-Transport-Security заставляет браузер всегда использовать HTTPS.
Используйте TLS 1.3TLS 1.3 быстрее (1-RTT handshake) и безопаснее — убраны устаревшие шифры.
Мониторьте срок действияСоздайте монитор на Enterno.io — получайте уведомления задолго до истечения.
Проверяйте цепочку после обновленияПосле обновления сертификата убедитесь, что промежуточные сертификаты установлены.

Получите больше с бесплатным аккаунтом

Мониторинг SSL-сертификатов, история проверок и уведомления за 30 дней до истечения.

Зарегистрироваться (FREE)

Больше по теме

Источники

Часто задаваемые вопросы

Alpine Docker - safe?

Да если добавить ca-certificates. Scratch — нужно копировать bundle из builder-image.

CI / CD?

Образы типа alpine:latest обычно имеют ca-certificates. gcr.io/distroless/base — тоже. Проверь Dockerfile.

Self-signed?

Либо --cacert путь к self-signed CA, либо import в system bundle через update-ca-certificates.

Запустить инструмент, который описан в этой статье

Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.