#Что означает сообщение
cURL error 60
Обновите CA-сертификаты и укажите путь в curl.cainfo.
#Причины и признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Нет CA bundle | cURL не находит доверенный корень | Обновить официальное хранилище CA |
| Просрочен сертификат | Истёк срок сертификата API | Попросить владельца API обновить цепочку |
| Неверный путь | curl.cainfo указывает на отсутствующий файл | Указать путь в активной конфигурации |
| Перехват трафика | Сертификат выдаёт TLS-прокси организации | Уточнить доверенные CA у администратора |
#Пошаговое решение
- Отличите ошибку доверия от других неполадок TLS
cURL error 60означает, что проверка цепочки сертификатов не прошла, но причина может быть в локальном хранилище CA, неполной цепочке сервера или перехватывающем прокси. На сервере с PHP запишите точный URL, время и сообщениеcurl_error(). Для быстрой диагностики в терминале выполнитеcurl -Iv https://example.com, подставив реальный адрес API. Не добавляйтеCURLOPT_SSL_VERIFYPEER => false: это отключает защиту от подмены сервера. - Проверьте сертификат сервера и часыСверьте дату и часовой пояс сервера с реальным временем; неправильные часы могут нарушать проверку. Посмотрите цепочку сертификатов API в браузере или через
openssl s_client -connect api.example.com:443 -servername api.example.com -showcerts, подставив точное имя сервера. Если провайдер отдаёт неполную цепочку, исправление требуется на стороне API; если используется корпоративный TLS-прокси, запросите доверенный сертификат у администратора, а не скачивайте случайный файл из интернета. - Установите доверенный набор CA в активный PHPНа Linux обновите системный пакет
ca-certificatesштатным менеджером пакетов; путь к набору зависит от дистрибутива. На Windows/отдельной сборке PHP при необходимости скачайте актуальныйcacert.pemтолько из доверенного источника cURL, проверьте путь к файлу и укажите абсолютный путьcurl.cainfo="C:\certs\cacert.pem"в активномphp.iniвеб-обработчика, не только CLI. Для потоков OpenSSL может понадобиться отдельныйopenssl.cafile. После изменения перезапустите соответствующий PHP-FPM/веб-процесс. - Проверьте результат без отключения защитыЧерез диагностическую страницу, доступную только администратору, проверьте
ini_get("curl.cainfo")и факт чтения файла; затем повторите исходный HTTPS-запрос. Успех — cURL больше не выдаёт ошибку 60, а сервер отвечает приложению. При повторе выясните, какой именно корневой/промежуточный сертификат не найден. Удалите временную диагностическую страницу после проверки.
#На что обратить внимание
Не используйте CURLOPT_SSL_VERIFYPEER=false как исправление. На сервере с перехватывающим корпоративным прокси уточните политику доверенных сертификатов у администратора.