как заставить TLSv1.2 в Python 3.7.4 и openssl 1.1.1? - PullRequest
0 голосов
/ 10 января 2020

Я работаю с API, который специально принимает только TLS v1.2. Максимальная и стандартная версия TLS на моей машине - 1.3, как сделать это 1.2? Вот что я попытался осмотреть:

from requests.adapters import HTTPAdapter
from requests.packages.urllib3.poolmanager import PoolManager
import ssl

class MyAdapter(HTTPAdapter):
    def init_poolmanager(self, connections, maxsize, block=False):
        self.poolmanager = PoolManager(num_pools=connections,
                                       maxsize=maxsize,
                                       block=block,
                                       ssl_version=ssl.PROTOCOL_TLSv2)


import requests
s = requests.Session()
s.mount('https://', MyAdapter())


s.get('https://www.howsmyssl.com/a/check', verify=False).json()['tls_version']

'TLS 1.3'

Куда я иду неправильно?

1 Ответ

0 голосов
/ 13 января 2020

Неважно, после небольшого перерыва и свободных sh глаз, это удалось понять.

Эта ссылка должна помочь любому с более конкретными c запросами.

https://lukasa.co.uk/2017/02/Configuring_TLS_With_Requests/

from requests.adapters import HTTPAdapter
from requests.packages.urllib3.poolmanager import PoolManager
import logging


class DESAdapter(HTTPAdapter):
    """
    A TransportAdapter that re-enables 3DES support in Requests.
    """
    def create_ssl_context(self):
        ctx = ssl.create_default_context()
        # disallow TLS_V1.3
        ctx.options |= ssl.OP_NO_TLSv1_3
        return ctx  
    def init_poolmanager(self, *args, **kwargs):
        print(' ----------- DESAdapter.init_poolmanager -------------- ')
        kwargs['ssl_context'] = self.create_ssl_context()
        return super(DESAdapter, self).init_poolmanager(*args, **kwargs)
    def proxy_manager_for(self, *args, **kwargs):
        print(' ----------- DESAdapter.proxy_manager_for -------------- ')
        kwargs['ssl_context'] = self.create_ssl_context()
        return super(DESAdapter, self).proxy_manager_for(*args, **kwargs)

import requests
s = requests.Session()
s.mount('https://', DESAdapter())

s.get('https://www.howsmyssl.com/a/check').json()['tls_version']
...