Перейти к содержанию
  • Лента
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Свернуть
exlends
Категории
  1. Главная
  2. Категории
  3. Образование
  4. Программирование
  5. Как исправить ошибку ssl: CERTIFICATE_VERIFY_FAILED в Python

Как исправить ошибку ssl: CERTIFICATE_VERIFY_FAILED в Python

Запланировано Прикреплена Закрыта Перенесена Программирование
pythonssl
1 Сообщения 1 Постеры 10 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • kirilljsxK Не в сети
    kirilljsxK Не в сети
    kirilljsx
    js
    написал отредактировано kirilljsx
    #1

    Разберем популярную ошибку ssl: CERTIFICATE_VERIFY_FAILED. Она означает, что Python не может проверить подлинность HTTPS-сертификата сервера. Часто скрипт отлично работает на домашнем Wi-Fi, но моментально падает с этой ошибкой в офисе или при включенном корпоративном VPN.

    Причина кроется в сетевой безопасности. Корпоративные фаерволы и системы защиты часто работают по принципу “человек посередине” (MitM), подменяя оригинальный сертификат целевого сайта на свой собственный. Если этого корпоративного сертификата нет в доверенном хранилище (trust store) вашего компьютера, Python обрывает соединение в целях безопасности.

    Допустим, нам нужно написать простой скрипт для обращения к внешнему API из офисной сети. В качестве примера возьмем эндпоинт https://catfact.ninja/fact, который возвращает случайный факт о котах. Использовать будем только встроенные библиотеки: json, ssl и urllib.request.

    Чтобы скрипт игнорировал подмену сертификата и успешно выполнил запрос, мы можем принудительно отключить проверку. Для этого используется модуль ssl и функция _create_unverified_context(). Мы создаем “недоверенный” контекст и передаем его параметром в запрос urllib.

    # Встроенные либы
    import json
    import ssl
    import urllib.request
    
    url = "https://catfact.ninja/fact"
    
    def get_cat_fact():
        # Формируем запрос с указанием User-Agent
        req = urllib.request.Request(
            url,
            headers={
                "User-Agent": "Mozilla/5.0",
            },
        )
        # Создаем контекст, который игнорирует проверку SSL
        context = ssl._create_unverified_context()
    
        try:
            # Передаем контекст вторым аргументом
            response = urllib.request.urlopen(req, context=context)
            result = json.loads(response.read())
            print("Полный ответ:", result)
            print("Факт:", result["fact"])
        except Exception as e:
            print("Ошибка:", e)
    
    get_cat_fact()
    
    1 ответ Последний ответ
    0

    Здравствуйте! Похоже, вас заинтересовала эта беседа, но у вас ещё нет аккаунта.

    Надоело каждый раз пролистывать одни и те же посты? Зарегистрировав аккаунт, вы всегда будете возвращаться на ту же страницу, где были раньше, и сможете выбирать, получать ли уведомления о новых ответах (по электронной почте или в виде push-уведомлений). Вы также сможете сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.

    С вашими комментариями этот пост мог бы стать ещё лучше 💗

    Зарегистрироваться Войти

    Категории

    • Главная
    • Новости
    • Фронтенд
    • Бекенд
    • Языки программирования

    Контакты

    • Сотрудничество
    • info@exlends.com

    © 2024 - 2026 ExLends, Inc. Все права защищены.

    Политика конфиденциальности
    • Войти

    • Нет учётной записи? Зарегистрироваться

    • Войдите или зарегистрируйтесь для поиска.
    • Первое сообщение
      Последнее сообщение
    0
    • Лента
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы