在Python 2.6中发送TLS 1.2请求

Mul*_*hes 14 python ssl request python-2.6 python-requests

我被困在使用Python 2.6,我需要使用TLS 1.2发送一个帖子请求.Python 2.6的requests库是否支持TLS 1.2?如何确保/验证请求是通过TLS1.2而不是其他版本进行的?

样本请求是

r=requests.post(url,data=payload,verify=False)
Run Code Online (Sandbox Code Playgroud)

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

fra*_*ale 13

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

要强制TLS的特定版本中的Python 2.7.9或更高,构造一个SSLContext与适当的PROTOCOL_*恒定.然后,您可以将其与任何可以提供自己的API一起使用SSLContext.

import ssl
import urllib2

ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
# set other SSLContext options you might need
response = urllib2.urlopen(url, context=ctx)
Run Code Online (Sandbox Code Playgroud)

要使用特定协议版本或更高版本(包括将来的版本),请使用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
Run Code Online (Sandbox Code Playgroud)

至于使用SSLContext带有请求的自定义以强制使用特定协议版本,根据文档似乎没有办法执行此操作,请参阅文档中的以下示例.

  • 请求库支持设置特定版本的ssl:http://docs.python-requests.org/en/latest/user/advanced/#example-specific-ssl-version (4认同)