Отключение проверки сертификата в Python requests
Быстрый ответ
# Отключаем проверку SSL в Requests:
import requests
requests.get('https://example.com', verify=False)
Внимание! Отключение проверки SSL несёт в себе серьёзные безопасностные риски. Применяйте данную опцию только для целей тестирования.
Управление процессом с помощью контекстных менеджеров
При выполнении множественных запросов в вашем скрипте постоянное добавление verify=False
может выглядеть избыточным. Упростите эту задачу с использованием контекстного менеджера. Он установит значение verify=False
по умолчанию и автоматически закроет открытые адаптеры по окончании работы.
Контекстные менеджеры: благополучное решение для проверок SSL
from contextlib import contextmanager
import requests
@contextmanager
def unverified_https_requests():
# Создаем сессию, отключающую проверки SSL.
session = requests.Session()
session.verify = False
# Чтобы не засорять консоль, отключаем предупреждения.
requests.packages.urllib3.disable_warnings()
try:
yield session
finally:
# По завершении работы закрываем сессию, не оставляя следов.
session.close()
# Пользуемся сессией, не заботясь о предупреждениях.
with unverified_https_requests() as session:
response = session.get('https://example.com')
Предупреждения: поддержание чистоты консоли
Нам не нужны непрерывные предупреждения в консоли о потенциальных рисках безопасности. Отключим InsecureRequestWarning
, чтобы консоль не перегружалась лишними сообщениями:
# Применяйте это только если вам известны потенциальные риски:
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
Проверки SSL: перерыв с помощью переменных окружения
Альтернативой может стать использование переменной окружения CURL_CA_BUNDLE
, установленной в ноль. Это позволит нам сделать перерыв в проверках SSL:
export CURL_CA_BUNDLE=""
Выполните эту команду в терминале перед запуском Python-скрипта. Не стоит делать это в среде, где другие приложения выполняют важные операции.
Манипуляции с контекстом SSL: секретное рукопожатие
Для опытных разработчиков Python, которые знакомы с нюансами модуля ssl
, имеется следующий метод:
import ssl
import requests
ssl_context = ssl.create_default_context()
ssl_context.verify_mode = ssl.CERT_NONE
response = requests.get('https://example.com', verify=ssl_context)
Совет: Не используйте этот приём в продуктивной среде.
Визуализация
Визуализируем, как можно отключить проверку SSL на следующем примере:
requests.get('https://example.com', verify=False); # И вуаля, замок исчез!
Мы можем представить исчезновение SSL блокировки в виде магического трюка:
До: [🔒🚪] // Закрытая дверь с бдительным замком на страже!
После: [🚪🔓] // Вуаля, дверь все еще закрыта, но замок исчез!
Не забывайте ПРЕДУПРЕЖДЕНИЕ: не позволяйте данному трюку стать вашей привычкой!
Руководство по безопасности и ответственное использование «волшебства»
Каждый раз, когда вы используете «волшебную палочку» для обхода проверок SSL, помните о своей ответственности.
Не рискуйте конфиденциальными данными
Избегайте использования «волшебства» в контексте работы с конфиденциальными данными. Проверки SSL являются надёжной защитой от атак «человека посередине» и других опасностей.
Повторяющиеся сессии с отключенной проверкой SSL
Если в рамках одной Session
выполняются множественные запросы, установите Session.verify
в False
заранее. Это даст вам волшебство одного клика, работающее на протяжении всей сессии:
s = requests.Session()
s.verify = False
Справляясь с истекшими сертификатами
Если сервис использует истекший SSL-сертификат, дважды подумайте, перед тем как отключить проверку. Обычно безопаснее обновить сертификат, чем рисковать безопасностью данных.
Образование в области информационной безопасности – лучшая инвестиция
Применение обходных путей для отключения проверок SSL требует больших знаний в области информационной безопасности. Обязательно обладайте этими знаниями, осознавайте потенциальные риски и будьте готовы к возможным последствиям.