Python请求-使用TLSV.1_3

Python请求-使用TLSV.1_3,python,ssl,python-requests,Python,Ssl,Python Requests,我尝试使用TLS1.3在Python中发出请求,因为它是站点所接受的。 我使用以下代码: import requests from requests.adapters import HTTPAdapter from requests.packages.urllib3.poolmanager import PoolManager from requests.packages.urllib3.util import ssl_ CIPHERS = ( 'AES128-GCM-SHA256:E

我尝试使用TLS1.3在Python中发出请求,因为它是站点所接受的。 我使用以下代码:

import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.poolmanager import PoolManager
from requests.packages.urllib3.util import ssl_

CIPHERS = (
    'AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:AES256-SHA'
)


class TlsAdapter(HTTPAdapter):

    def __init__(self, ssl_options=0, **kwargs):
        self.ssl_options = ssl_options
        super(TlsAdapter, self).__init__(**kwargs)

    def init_poolmanager(self, *pool_args, **pool_kwargs):
        ctx = ssl_.create_urllib3_context(ciphers=CIPHERS, cert_reqs=ssl.CERT_REQUIRED, options=self.ssl_options)
        self.poolmanager = PoolManager(*pool_args,
                                       ssl_context=ctx,
                                       **pool_kwargs)


sess = requests.session()
adp = TlsAdapter(ssl.OP_NO_TLSv1_3 | ssl.OP_NO_TLSv1_3)
sess.mount("https://", adapter)
在这里之前一切都很好。我开始用它来发送ecc请求,但出于好奇,我更深入地检查并使用Wireshark。这里说请求超过1.2而不是1.3


有人能帮我执行1.3而不是1.2吗?非常感谢。谢谢。

1)不要设置密码,只要说你想要TLS 1.3和2)“并使用Wireshark。这里说的是请求超过1.2而不是1.3。”这很复杂(因此在你的问题中不精确),因为1.3在某些地方(交换的消息的某些部分)看起来像1.2,以便能够绕过愚蠢的中间盒(这是一个多余的问题吗?)。例如,请参阅RFC 8446中的“protocolVersion legacy_record_version=0x0303;/*TLS v1.2*/”。@PatrickMevzek I正要链接到…:-)
ssl.OP_NO_TLSv1|3;ssl.OP_NO_TLSv1_3
在两个方面都很奇怪。首先有一个多余的,因为“A或A”总是A,第二个
OP_NO_TLSv1_3
特别禁止执行TLS 1.3,请参阅:“阻止TLSv1.3连接。此选项仅适用于协议\u TLS。它阻止对等方选择TLSv1.3作为协议版本。”@AndrewHenle谢谢:-)我忘了我写过,但它确实适合。要么使用自动协商可能的最高版本的
PROTOCOL\u TLS
,或者如果您坚持1.3,并且仅此而已,
OP_NO_SSLv2&OP_NO_SSLv3&OP_NO_TLSv1&OP_NO_TLSv1&OP_NO_TLSv1_2
应阻止所有这些协议,因此它(今天)保留为1.3或完全没有(取决于底层OpenSSL版本和远程服务器接受的内容)