Задать вопрос
@shamhi

TLSv1_3 в aiohttp?

В библиотеке requests я использую requests.adapter.HTTPAdapter для создания TLS сертификата
class TLSv1_3_BYPASS(HTTPAdapter):
    def __init__(self, *args, **kwargs):
        self.ssl_context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH)
        self.ssl_context.orig_wrap_socket = self.ssl_context.wrap_socket
        self.ssl_context.wrap_socket = self.wrap_socket
        self.ssl_context.set_ciphers(TLSv1_3_BYPASS.ciphers)
        self.ssl_context.set_ecdh_curve("prime256v1")
        self.ssl_context.minimum_version = ssl.TLSVersion.TLSv1_3
        self.ssl_context.maximum_version = ssl.TLSVersion.TLSv1_3
        super(TLSv1_3_BYPASS, self).__init__(**kwargs)

    def wrap_socket(self, *args, **kwargs):
        self.ssl_context.check_hostname = True
        return self.ssl_context.orig_wrap_socket(*args, **kwargs)

    def init_poolmanager(self, *args, **kwargs):
        kwargs["ssl_context"] = self.ssl_context
        kwargs["source_address"] = None
        return super(TLSv1_3_BYPASS, self).init_poolmanager(*args, **kwargs)

    def proxy_manager_for(self, *args, **kwargs):
        kwargs["ssl_context"] = self.ssl_context
        kwargs["source_address"] = None
        return super(TLSv1_3_BYPASS, self).proxy_manager_for(*args, **kwargs)

session = Session()
session.mount("https://", TLSv1_3_BYPASS())


Вопрос: Как сделать также, только в aiohttp?
  • Вопрос задан
  • 353 просмотра
Подписаться 2 Средний 4 комментария
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Академия Эдюсон
    Python-разработчик
    9 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Python-разработчик + ИИ
    8 месяцев
    Далее
Решения вопроса 1
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Забавно. Скоро не будет никакого смысла идти за ответом сюда, когда можно к чатжпт сходить.
Даже читать не стал ваш вопрос после заголовка и скопировал его в чатжпт4. Вот что он ответил:

В `aiohttp`, процесс создания и настройки пользовательского TLS контекста отличается от того, что используется в `requests`. В `aiohttp`, вы должны настроить SSL контекст до создания сессии и передать его в качестве аргумента при создании клиентской сессии. Вот как вы можете адаптировать ваш пример для `aiohttp`:

1. Создайте SSL контекст, используя стандартную библиотеку `ssl`.
2. Настройте контекст, задав нужные параметры, такие как версия TLS, набор шифров и кривые ECDH.
3. Создайте экземпляр `aiohttp.ClientSession`, передав SSL контекст.

Пример кода:

import ssl
import aiohttp

class TLSv1_3_BYPASS:
    ciphers = '...'  # Здесь должен быть ваш список шифров

    @staticmethod
    def create_ssl_context():
        ssl_context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH)
        ssl_context.set_ciphers(TLSv1_3_BYPASS.ciphers)
        ssl_context.set_ecdh_curve("prime256v1")
        ssl_context.minimum_version = ssl.TLSVersion.TLSv1_3
        ssl_context.maximum_version = ssl.TLSVersion.TLSv1_3
        return ssl_context

# Создание SSL контекста
ssl_context = TLSv1_3_BYPASS.create_ssl_context()

# Создание aiohttp сессии с пользовательским SSL контекстом
async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(ssl=ssl_context)) as session:
    # Теперь вы можете использовать session для выполнения запросов
    response = await session.get('https://example.com')
    # ...


В этом примере кода создаётся пользовательский SSL контекст, который затем используется для создания `aiohttp.ClientSession`. Обратите внимание, что вам нужно будет заменить `'...'` в `ciphers` на фактический список шифров, которые вы хотите использовать.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 75 000 ₽
DimaTech Ltd Краснодар
от 140 000 до 140 000 ₽