【问题标题】:Sending TLS 1.2 request in Python 2.6在 Python 2.6 中发送 TLS 1.2 请求
【发布时间】:2015-03-19 19:24:17
【问题描述】:

我无法使用 Python 2.6,我需要使用 TLS 1.2 发送发布请求。 Python 2.6 的 requests 库是否支持 TLS 1.2?如何确保/验证请求是通过 TLS1.2 而不是其他版本发出的?

一个示例请求是

r=requests.post(url,data=payload,verify=False)

我在论坛的某个地方知道我们需要编译pyOpenSSL 来支持这一点。有没有更简单的方法?

【问题讨论】:

    标签: python ssl request python-requests python-2.6


    【解决方案1】:

    Python 2.6 中的 ssl 模块仅支持最高 TLS 1.0。如果您不希望引入其他依赖项(例如您建议的 pyOpenSSL),则需要升级到 Python 2.7 或 3.x 以获得对更新版本 TLS 的支持。

    要在 Python 2.7.9 或更高版本中强制使用特定版本的 TLS,construct an SSLContext 和相应的 PROTOCOL_* constant。然后,您可以将它与任何可让您提供自己的SSLContext 的 API 一起使用。

    import ssl
    import urllib2
    
    ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
    # set other SSLContext options you might need
    response = urllib2.urlopen(url, context=ctx)
    

    要使用特定协议版本或更高版本(包括未来版本),请使用ssl.PROTOCOL_SSLv23,然后禁用您不想使用的协议版本:

    ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
    
    # allow TLS 1.2 and later
    ctx.options |= ssl.OP_NO_SSLv2
    ctx.options |= ssl.OP_NO_SSLv3
    ctx.options |= ssl.OP_NO_TLSv1
    ctx.options |= ssl.OP_NO_TLSv1_1
    

    至于使用带有请求的自定义SSLContext 来强制使用特定的协议版本,according to the documentation 似乎没有办法做到这一点see the following example from the docs

    【讨论】:

    • 谢谢@frasertweedale。发送请求时如何指定 TLS 的版本?
    • 更新了答案,包含更多信息和ssl 模块代码示例。不幸的是,Requests 库似乎没有办法做到这一点。
    • 如果服务器强制执行 TLS 1.2 请求,python 中的请求库是否可行?就我而言,当我使用wireshark捕获数据包时,我观察到的是从客户端机器发出的请求是TLS 1.0,但在服务器上捕获的数据包是TLS 1.2。我无法弄清楚,因为通过发送请求协议而不是通过特定端口,服务器和客户端正在协商通过 TLS 1.2 进行通信。这个链接说luxsci.com/blog/ssl-versus-tls-whats-the-difference.html
    • @testedboy 您链接的文章很困惑并且使用了奇怪的术语。 SSL 和 TLS 握手是相似的;两者都是“通过港口”。 “按协议”指的是应用层协议升级机制,如 STARTTLS。正如您所指出的,SSL/TLS 版本是在握手期间协商的;通常使用服务器和客户端都支持的高版本。
    • 请求库确实支持设置特定版本的 ssl:docs.python-requests.org/en/latest/user/advanced/…
    【解决方案2】:

    如果升级代码不是一个选项,您应该能够使用 squid 服务器或 nginx 代理您的连接。下面是一个squid“bump”方法的例子:

    Can I use Squid to upgrade client TLS connections?

    另一种选择是保留代理,但重写 URL(http 到 https)并让您的应用程序向 http 发送请求(看起来很奇怪,但如果实施得当的话可以工作)。

    【讨论】:

      猜你喜欢
      • 2019-10-17
      • 1970-01-01
      • 2015-03-10
      • 1970-01-01
      • 2016-10-31
      • 2017-06-12
      • 2018-08-24
      • 2021-05-03
      • 1970-01-01
      相关资源
      最近更新 更多