Python请求获取TLSV1\u警报\u内部错误
我正在尝试连接到具有Python请求获取TLSV1\u警报\u内部错误,python,python-3.x,ssl,python-requests,Python,Python 3.x,Ssl,Python Requests,我正在尝试连接到具有请求的网站,该请求要求使用客户端证书 import requests r = requests.get(url, cert='path to cert') print(r.status_code) 这适用于使用相同客户端证书的站点。该服务器正在使用TLS\U RSA\U WITH\U AES\U 128\U CBC\U SHA,TLS 1.0。但是,我的目标站点使用TLS\u ECDHE\u RSA\u和\u AES\u 128\u CBC\u SHA,TLS 1.1。所以
请求的网站,该请求要求使用客户端证书
import requests
r = requests.get(url, cert='path to cert')
print(r.status_code)
这适用于使用相同客户端证书的站点。该服务器正在使用TLS\U RSA\U WITH\U AES\U 128\U CBC\U SHA,TLS 1.0
。但是,我的目标站点使用TLS\u ECDHE\u RSA\u和\u AES\u 128\u CBC\u SHA,TLS 1.1。所以基本上区别在于TLS1工作,而TLS1.1不工作。在浏览器中一切正常,所以它一定与Python的SSL有关
我使用的是requests
version 2.7.0,我还安装了requests[security]
<代码>pip冻结:
cffi==0.9.2
cryptography==0.8.1
ndg-httpsclient==0.3.3
pyasn1==0.1.7
pycparser==2.10
pyOpenSSL==0.15.1
requests==2.7.0
six==1.9.0
我收到的具体错误是requests.exceptions.SSLError:[SSL:TLSV1\u ALERT\u INTERNAL\u error]TLSV1 ALERT INTERNAL error(\u SSL.c:600)
。这是在使用Python 3.4.3的Windows 7上实现的。不幸的是,这是在一台内部机器上,所以我只能使用Windows,而我们的PyPi内部镜像并没有所有东西的最新版本。在我看来,这似乎与ssl
失败有关,而不一定与请求有关
谷歌不会给出有希望的结果。有一篇StackOverflow文章描述了相同的问题,但是提供的解决方案(使用自定义适配器)对我来说不起作用
希望以前有人碰到过这个问题,可以给我一些关于如何修复它的建议。谢谢你
编辑:我做了一个互动的wireshark捕捉。发送回的SSL警报为“级别:致命(2)说明:内部错误(80)”。TCP连接启动后,我的机器发送一个客户机hello
Content Type: Handshake (22)
Version: TLS 1.0 (0x0301)
Length: 512
然后,该数据包的握手协议段是
Handshake Type: Client Hello (1)
Length: 508
Version: TLS 1.2 (0x0301)
然后是支持的密码套件列表等。我查看了客户发送的密码套件列表,并列出了TLS\u ECDHE\u RSA\u WITH_AES\u 128\u CBC\u SHA
。服务器确认此消息,然后发送警报数据包。我通过从requests.packages.urllib3.util.ssl\uu默认密码
中删除第一个条目ECDH+AESGCM
,消除了相同的SSLError
,服务器似乎遇到了问题。线路
requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS = 'DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+HIGH:DH+HIGH:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+HIGH:RSA+3DES:!aNULL:!eNULL:!MD5'
为我解决了这个问题。我删除了几乎所有的第一个条目,从而消除了上述错误:
requests.packages.urllib3.util.ssl\u.DEFAULT\u CIPHERS='RSA+AESGCM:RSA+AES:RSA+HIGH:RSA+3DES:!阿努尔:!埃努尔:!MD5'
对我来说,request.request('GET')…
而不是request.GET(…
有效。你能用Wireshark捕获网络流量的跟踪吗?在发送警报之前的握手过程中,SSL协商的所有参数是什么?我将根据结果进行编辑now@AdamRosenfield张贴