<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Как исправить ошибку ssl: CERTIFICATE_VERIFY_FAILED в Python]]></title><description><![CDATA[<p dir="auto">Разберем популярную ошибку <code>ssl: CERTIFICATE_VERIFY_FAILED</code>. Она означает, что Python не может проверить подлинность HTTPS-сертификата сервера. Часто скрипт отлично работает на домашнем Wi-Fi, но моментально падает с этой ошибкой в офисе или при включенном корпоративном VPN.</p>
<p dir="auto">Причина кроется в сетевой безопасности. Корпоративные фаерволы и системы защиты часто работают по принципу “человек посередине” (<strong>MitM</strong>), подменяя оригинальный сертификат целевого сайта на свой собственный. Если этого корпоративного сертификата нет в доверенном хранилище (<strong>trust store</strong>) вашего компьютера, Python обрывает соединение в целях безопасности.</p>
<p dir="auto"><strong>Допустим</strong>, нам нужно написать простой скрипт для обращения к внешнему API из офисной сети. В качестве примера возьмем эндпоинт <code>https://catfact.ninja/fact</code>, который возвращает случайный факт о котах. Использовать будем только встроенные библиотеки: <code>json</code>, <code>ssl</code> и <code>urllib.request</code>.</p>
<p dir="auto">Чтобы скрипт игнорировал подмену сертификата и успешно выполнил запрос, мы можем принудительно отключить проверку. Для этого используется модуль <code>ssl</code> и функция <code>_create_unverified_context()</code>. Мы создаем “<em>недоверенный</em>” контекст и передаем его параметром в запрос <code>urllib</code>.</p>
<pre><code class="language-python"># Встроенные либы
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()
</code></pre>
]]></description><link>https://forum.exlends.ru/topic/1879/kak-ispravit-oshibku-ssl-certificate_verify_failed-v-python</link><generator>RSS for Node</generator><lastBuildDate>Wed, 20 May 2026 08:16:39 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/1879.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 23 Mar 2026 14:31:46 GMT</pubDate><ttl>60</ttl></channel></rss>