Ошибка SSL-сертификата при подключении к AI API из России
SSL certificate problem / cURL error 60 — две причины и как их различить
«SSL certificate problem: unable to get local issuer certificate», «cURL error 60», «SSL handshake failed» — при обращении к официальным api.openai.com, api.anthropic.com или generativelanguage.googleapis.com из России эта ошибка встречается часто. За одинаковым текстом стоят две принципиально разные причины.
Сразу отсечём похожее Если вместо ошибки сертификата вы получаете тайм-аут или разрыв соединения — это другая проблема, сетевая. Ошибка про сертификат всегда означает одно: клиент не смог подтвердить, что сертификат настоящий.
Причина 1: сертификат подменяют по пути
Между вами и официальным доменом может стоять посредник, который вскрывает HTTPS и предъявляет клиенту свой сертификат: корпоративный прокси, средство фильтрации трафика у провайдера, антивирус с проверкой HTTPS. Браузер такой сертификат обычно принимает — его корень заранее установлен в системе, — а консольные клиенты и библиотеки отклоняют. Отсюда типичная картина: в браузере сайт открывается, а из кода тот же адрес выдаёт ошибку сертификата.
Причина 2: клиенту нечем проверить сертификат
- Сильно сбитые дата и время. Сертификат проверяется в том числе по сроку действия: если часы ушли на месяцы, действующий сертификат выглядит просроченным или ещё не вступившим в силу.
- Устаревшие корневые сертификаты ОС — особенно на старых версиях Windows или после переустановки системы без обновлений.
- Антивирус или корпоративный прокси с SSL-инспекцией — они «подменяют» сертификат своим, и клиент видит его как недоверенный.
- Системная переменная окружения (например, самодельный
NODE_EXTRA_CA_CERTSили сброшенныйSSL_CERT_FILE), оставшаяся от другой программы.
Как проверить, какая это причина
- Проверьте дату и время системы — это самая быстрая проверка из всех.
- Откройте тот же адрес с телефона через мобильный интернет (не Wi-Fi). Ошибки нет — причина либо в компьютере, либо в вашей сети; чтобы разделить, повторите с компьютера, раздав интернет с телефона.
- Временно отключите антивирус/VPN-клиент и повторите запрос — если ошибка исчезла, дело в перехвате трафика на вашей стороне.
Что делать
Если сертификат подменяет посредник — добавьте домен API в исключения антивируса или прокси. В корпоративной сети это решается только с администратором: он либо добавит исключение, либо выдаст корневой сертификат компании для установки в систему.
Если клиенту нечем проверить цепочку — обновите корневые сертификаты системы, синхронизируйте время, проверьте оставшиеся от других программ переменные окружения вроде NODE_EXTRA_CA_CERTS и SSL_CERT_FILE.
Отдельный случай — когда исключение сделать нельзя, например в корпоративной сети с обязательной проверкой трафика. Тогда остаётся сменить сеть или работать через агрегатор, домен которого фильтрация не трогает.