Python LinuxWindowsmacOS

Python: SSL CERTIFICATE_VERIFY_FAILED при подключении к API

  • Обновлено
  • Чтение ≈ 3 минуты

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

Python CERTIFICATE_VERIFY_FAILED при запросе к API: проверьте адрес сервера, время, цепочку сертификатов, окружение requests и доверенные корневые сертификаты, не отключая TLS.

В этой статье
  1. Что происходит и как распознать неисправность
  2. Как отличить причины
  3. Пошаговая диагностика и исправление
  4. Команды и примеры для проверки
  5. Как проверить результат и что делать дальше

#Что происходит и как распознать неисправность

Ошибка [SSL: CERTIFICATE_VERIFY_FAILED] появляется во время защищённого HTTPS-соединения. Это не обязательно ошибка самого Python: сертификат может быть просрочен, выдан не для указанного имени, недоверен окружению или заменяться корпоративным посредником.

#Как отличить причины

Возможная причинаКак узнатьЧто делать
Ошибка имени или срока сертификатаAPI выдаёт сертификат для другого имени либо с истёкшим сроком.Браузер на том же адресе сообщает о сертификате; URL отличается от документации API.Исправьте имя узла или обратитесь к администратору сервера.
Недоверенный центр сертификацииОкружение Python не знает нужный корневой сертификат.Браузер работает на управляемом ПК, а Python в контейнере — нет.Получите проверенный сертификат у администратора и настройте доверие.
Перехват HTTPS проксиПрокси подменяет сертификат на корпоративный.В офисной сети ошибка есть, в разрешённой другой сети — нет.Согласуйте настройку доверия и прокси, не отключая проверку TLS.

#Пошаговая диагностика и исправление

  1. Скопируйте точный код ошибки без секретовВ терминале IDE запустите проблемный запрос и запишите текст certificate verify failed, имя узла и используемую библиотеку (requests, urllib, httpx). Не публикуйте полный URL, если он содержит ключ или токен в параметрах. Если виден не SSL-код, а Connection refused/NameResolutionError, сначала диагностируйте сеть.
  2. Уточните правильный адрес и сертификат сервераОткройте браузер, введите тот же HTTPS-адрес API, но без токенов и секретных путей, и посмотрите сведения о защищённом соединении через значок слева от адреса (расположение зависит от браузера). Проверьте правильность имени и срок действия. Если сертификат недействителен в браузере, прекратите запросы и свяжитесь с владельцем API.
  3. Проверьте дату и часовой пояс системыВ Windows откройте «Параметры → Время и язык → Дата и время», а в Linux выполните date -Is в терминале. Если часы заметно неверны, исправьте их штатной синхронизацией с разрешённым сервером времени. Повторите запрос; сертификаты проверяют время действия. Если время верное, переходите дальше.
  4. Сверьте запускаемый Python и версию библиотекиОткройте терминал проекта и выполните python -c "import sys; print(sys.executable)". Для requests выполните python -m pip show requests certifi; убедитесь, что команды относятся к интерпретатору приложения. Если приложение запускается в контейнере, проверять пакеты нужно внутри контейнера; установка на хосте не меняет контейнер.
  5. Проверьте доверенные центры без отключения проверкиЕсли используется requests, посмотрите путь набора доверенных CA через python -c "import requests; print(requests.certs.where())". Если библиотека или доверенное хранилище устарели, обновляйте пакеты в тестовом окружении согласно требованиям проекта. Для служебного API с собственным CA запросите у администратора подлинный сертификат доверенного центра и одобренный способ его установки.
  6. Отдельно проверьте корпоративный прокси и переменныеПроверьте, использует ли программа HTTPS_PROXY или REQUESTS_CA_BUNDLE, не выводя в общий журнал секреты прокси. При requests доверенный файл CA можно указать параметром verify="/реальный/путь/ca.pem", только если файл получен из проверенного источника. Если вы используете подготовленные запросы PreparedRequest, настройки окружения могут не применяться автоматически — проверьте merge_environment_settings по документации requests.
  7. Повторите запрос и при неуспехе передайте сведенияПосле корректной настройки сделайте штатный запрос к API; успешное TLS-соединение не гарантирует код HTTP 200 — сервер может вернуть 401 или 403 из-за авторизации, это другая задача. Если ошибка остаётся, сохраните домен без секретов, ОС, версию Python, текст ошибки и сведения об издателе сертификата и обратитесь к администратору API. Любую временно добавленную настройку CA отменяйте, если она не подходит.

#Команды и примеры для проверки

Linux · Терминал (Bash)Команда
Выполнять в терминале проекта без прав администратора. Вывод показывает путь интерпретатора и наличие библиотек; ничего не изменяется.
python -c "import sys; print(sys.executable)"
python -m pip show requests certifi
Python
Демонстрационный синтаксис. Не запускайте URL из примера как проверку вашего API; подставьте разрешённый адрес без секретов. Проверка сертификата включена по умолчанию.
import requests

url = "https://api.example.org/status"  # замените на реальный публичный адрес API
response = requests.get(url, timeout=10)
print(response.status_code)

#Как проверить результат и что делать дальше

Правильная проверка: HTTPS-соединение проходит с включённой верификацией сертификата; дальнейшая HTTP-ошибка рассматривается отдельно. Если нужно проверить другой сертификат, не отключайте verify и не доверяйте случайным файлам из интернета.

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

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