某些站点的Python HTTPS请求(urllib2)在没有代理的Ubuntu 12.04上失败

Modified on: Sat, 09 Jun 2018 13:45:53 +0800

我有一个小应用程序,我用Python编写,它曾经工作......直到昨天,它突然开始在HTTPS连接中给我一个错误。我不记得是否有更新,但Python 2.7.3rc2和Python 3.2都失败了。

我用谷歌搜索并发现当人们在代理后面时会发生这种情况,但我不是(自上次工作以来我的网络中没有任何变化)。我的syster运行Windows和Python 2.7.2的计算机没有问题(在同一网络中)。

>>> url = 'https://www.mediafire.com/api/user/get_session_token.php' >>> response = urllib2.urlopen(url).read() File "/usr/lib/python2.7/urllib2.py", line 126, in urlopen return _opener.open(url, data, timeout) File "/usr/lib/python2.7/urllib2.py", line 400, in open response = self._open(req, data) File "/usr/lib/python2.7/urllib2.py", line 418, in _open '_open', req) File "/usr/lib/python2.7/urllib2.py", line 378, in _call_chain result = func(*args) File "/usr/lib/python2.7/urllib2.py", line 1215, in https_open return self.do_open(httplib.HTTPSConnection, req) File "/usr/lib/python2.7/urllib2.py", line 1177, in do_open raise URLError(err) urllib2.URLError: <urlopen error [Errno 8] _ssl.c:504: EOF occurred in violation of protocol>

怎么了?任何帮助表示赞赏。

PS:旧的python版本也不起作用,不在我的系统中,也不在USB的实时会话中,但是在Ubuntu 11.10实时会话中工作。

最佳答案

这似乎与在12.04中找到的OpenSSL版本增加了TLS 1.1和1.2支持有关。可以使用OpenSSL命令行工具重现连接失败:

$ openssl s_client -connect www.mediafire.com:443
CONNECTED(00000003)
140491065808544:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:177:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 320 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
---

如果我强制连接使用带有-tls1命令行参数的TLS 1.0,则连接成功。

我建议您在此处提交有关此问题的错误报告:

https://bugs.launchpad.net/ubuntu/+filebug


相关问答

添加新评论