@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?
  • Вопрос задан
  • 131 просмотр
Решения вопроса 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` на фактический список шифров, которые вы хотите использовать.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы