Python WindowsLinuxmacOSPython 3

Python: Ошибка SSL при запросе Python requests к сайту

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

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

requests.exceptions.SSLError при HTTPS означает, что проверка TLS-сертификата не удалась: возможны неправильные часы, неполная цепочка сервера, корпоративный прокси или несовпадение имени сайта. Отключать проверку verify=False нельзя.

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

#Что произошло и когда проявляется ошибка

requests.exceptions.SSLError при HTTPS означает, что проверка TLS-сертификата не удалась: возможны неправильные часы, неполная цепочка сервера, корпоративный прокси или несовпадение имени сайта. Отключать проверку verify=False нельзя.

#Причины и диагностические признаки

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

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

  1. 1. Запишите текст ошибки и адресВ терминале запустите небольшой тест с публичным HTTPS-адресом, на который у вас есть разрешение обращаться; не включайте токены в вывод. Сохраните тип исключения и доменное имя: CERTIFICATE_VERIFY_FAILED, hostname mismatch и сбой соединения имеют разные причины.
  2. Пример кода по теме
    Python
    Образец кода для файла .py в тестовой копии проекта; перед внедрением замените имена файлов на реальные.
    import requests
    try:
        r = requests.get("https://www.python.org/", timeout=(5, 20))
        print(r.status_code)
    except requests.exceptions.SSLError as exc:
        print(type(exc).__name__, str(exc)[:250])
  1. 2. Проверьте системные часы и адрес сайтаОткройте настройки даты и времени ОС и сравните дату, время и часовой пояс. Затем откройте тот же HTTPS-адрес в современном браузере; изучите сведения о сертификате через значок безопасности и сообщение браузера. Если браузер тоже ругается, сначала исправляйте сертификат на сервере, а не код клиента.
  1. 3. Уточните Python, Requests и источник доверияПроверьте версии пакетов именно тем интерпретатором, который запускает приложение. Не обновляйте на боевом сервере вслепую; создайте отдельную копию виртуального окружения. certifi.where() показывает используемый пакет сертификатов, но системные и корпоративные настройки могут влиять на доверие по-разному.
    Linux · Терминал (Bash)Команда
    Команда только выводит версии и путь к хранилищу; запуск в окружении приложения.
    python -c "import requests,certifi; print(requests.__version__); print(certifi.where())"
  1. 4. При корпоративном удостоверяющем центре используйте проверенный CAЕсли компания перехватывает TLS, запросите у администратора сертификат удостоверяющего центра из проверенного канала и подтвердите его отпечаток. В тестовой копии укажите путь к доверенному набору сертификатов параметром verify=; файл должен содержать корректный набор CA, а не произвольный сертификат сайта.
  2. Пример для Linux/macOS; на Windows используйте абсолютный путь к утверждённому файлу CA
    Python
    Пример для Linux/macOS; на Windows используйте абсолютный путь к утверждённому файлу CA.
    requests.get("https://example.com/", timeout=(5, 20), verify="/path/to/trusted-ca-bundle.pem")
  1. 5. Верните строгую проверку и повторите запросУбедитесь, что verify включён, URL совпадает с именем в сертификате и запрос завершился ожидаемым HTTP-ответом. Код 401/403 подтверждает, что TLS уже прошёл, а доступ запрещён по другим причинам. Не используйте verify=False и не отключайте предупреждения urllib3 ради «исправления».

#Как проверить, что проблема устранена

HTTPS-соединение устанавливается с включённой проверкой сертификатов; проблема подтверждённо решена на стороне цепочки, доверия или имени.

#Если исправление не помогло

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

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

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