Ошибка SSL-сертификата в CURL: решение проблемы с локальным сертификатом
Что означает ошибка "unable to get local issuer certificate" в CURL
При использовании CURL для выполнения HTTP-запросов пользователи часто сталкиваются с ошибкой 60: "SSL certificate: unable to get local issuer certificate". Эта ошибка указывает на то, что CURL не может проверить подлинность SSL-сертификата удаленного сервера из-за отсутствия доступа к сертификату издателя (центра сертификации) на локальном устройстве.
Причины возникновения ошибки SSL-сертификата
Существует несколько основных причин, по которым может возникать эта ошибка:
- На вашей системе отсутствует актуальный файл корневых сертификатов.
- CURL не настроен на использование правильного пути к файлу сертификатов.
- Сертификат удаленного сервера выдан неизвестным или непризнанным центром сертификации.
- В некоторых корпоративных средах используются прокси-серверы с SSL-инспекцией.
Способы решения проблемы с SSL-сертификатом в CURL
Установка актуального файла сертификатов CA
Самый надежный способ решения проблемы — загрузить актуальный пакет сертификатов доверенных центров сертификации (CA):
bash
curl -O https://curl.se/ca/cacert.pem
После загрузки файла укажите путь к нему в вашей команде CURL:
bash
curl —cacert /путь/к/cacert.pem https://ваш-сайт.com
Настройка переменной окружения CURL_CA_BUNDLE
Чтобы не указывать путь к файлу сертификатов в каждой команде, можно настроить переменную окружения:
bash
export CURL_CA_BUNDLE=/путь/к/cacert.pem
Для постоянной настройки добавьте эту строку в ваш файл .bashrc
или .bash_profile
.
Отключение проверки SSL (не рекомендуется для продакшена)
В исключительных случаях, например при тестировании, можно отключить проверку SSL:
bash
curl -k https://ваш-сайт.com
или
bash
curl —insecure https://ваш-сайт.com
Важно: этот метод небезопасен и не рекомендуется для использования в продакшн-среде, так как он подвергает ваши соединения риску атак "человек посередине" (MITM).
Особенности решения проблемы в разных операционных системах
Windows
В Windows можно установить актуальные сертификаты и настроить CURL, указав путь к файлу сертификатов в системной переменной:
- Скачайте файл
cacert.pem
с официального сайта CURL - Сохраните его в надежном месте, например,
C:\curl-ca\cacert.pem
- Создайте системную переменную
CURL_CA_BUNDLE
с этим путем
Linux
В большинстве дистрибутивов Linux можно решить проблему, установив пакет с сертификатами CA:
В Debian/Ubuntu:
bash
sudo apt-get install ca-certificates
В CentOS/RHEL:
bash
sudo yum install ca-certificates
macOS
Пользователи macOS могут обновить сертификаты с помощью Homebrew:
bash
brew install curl-ca-bundle
Проверка правильности настройки SSL-сертификатов
После настройки сертификатов выполните тестовый запрос к защищенному сайту:
bash
curl -v https://www.google.com
Если настройка выполнена правильно, вы увидите сообщение о успешной проверке сертификата без ошибки 60.
Заключение
Ошибка "unable to get local issuer certificate" в CURL указывает на проблемы с проверкой SSL-сертификата. Решение заключается в правильной настройке доступа CURL к актуальному файлу корневых сертификатов. Следуя рекомендациям из этой статьи, вы сможете решить проблему и обеспечить безопасное соединение для ваших HTTP-запросов.
Не пренебрегайте проверкой SSL-сертификатов, так как это критически важно для безопасности ваших приложений и защиты данных от перехвата или подмены.