java – Python下的间歇性“sslv3警报握手失败”
我有一个用JBoss编写的用
Java编写的REST API.最近我们将JVM从1.6更新到1.7.这开始只引起我们连接的
Python客户端的问题.间歇性地,Python客户端正在获得握手失败.我们写了一个非常简单的测试来重现问题:
import httplib2 for i in range(1,500): print i response,content = httplib2.Http(disable_ssl_certificate_validation=True).request('https://server.com:8443',) 提供以下输出: . . . 64 65 66 67 Traceback (most recent call last): File "api_test/test.py",line 6,in <module> response,content = httplib2.Http(disable_ssl_certificate_validation=True).request('https://server.com:8443/rest/solidtumor/2012/id/50d3216c092c8554b8b9f384?glossary=true&api_key=APIKEY',) File "/home/hostovic/api_test/httplib2/__init__.py",line 1445,in request (response,content) = self._request(conn,authority,uri,request_uri,method,body,headers,redirections,cachekey) File "/home/hostovic/api_test/httplib2/__init__.py",line 1197,in _request (response,content) = self._conn_request(conn,headers) File "/home/hostovic/api_test/httplib2/__init__.py",line 1133,in _conn_request conn.connect() File "/home/hostovic/api_test/httplib2/__init__.py",line 914,in connect raise SSLHandshakeError(e) httplib2.SSLHandshakeError: [Errno 1] _ssl.c:490: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure 第67次调用在此次运行中失败,但每次运行测试时都会在不同时间失败. 我们的其他客户端(Java,Groovy和Ruby)没有任何问题. 如果我将JVM切换回1.6,则故障停止. 我使用以下方法进行了openssl检查: openssl s_client -connect server.com:8443 它返回了这个: New,TLSv1/SSLv3,Cipher is EDH-RSA-DES-CBC3-SHA Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE SSL-Session: Protocol : TLSv1.2 Cipher : EDH-RSA-DES-CBC3-SHA Session-ID: 50E748EA341BB433EEBC7386C606313C2B8B86360ED71DC8F3B0A14A1579D91B Session-ID-ctx: Master-Key: 1007AC489D60FE2D818F71A5A6873D5BBF5B1770BEC31CDBF29D0562DB0D30A33D9EBBA8AD211B8E24B23494B20A6223 Key-Arg : None Krb5 Principal: None PSK identity: None PSK identity hint: None Start Time: 1357334762 Timeout : 300 (sec) Verify return code: 0 (ok) 这似乎是正确的,但我不确定.如果它在每次通话中失败都会是一回事,但只是随机失败才真是奇怪.谁见过这个? 解决方法
使用Python 2.6连接到Tomcat 7(Java 1.7)时,我遇到了同样的间歇性错误.
当我将JVM从1.7u1升级到1.7u6时,我首先遇到了这个问题.在本文中,看起来Java中的密码首选项顺序已更改: Java 7 and Could not generate DH keypair 在JVM升级之前,SSL_RSA_WITH_3DES_EDE_CBC_SHA是用于SSL通信的首选密码.升级后,SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA会获得首选项. 95%的时间,SSL通信都很好.但是有5%的时间,它就像你所描述的那样失败了. 似乎Python在Diffie-Hellman密码方面存在问题. Python 3.3中有一个修复: http://bugs.python.org/issue13626 我目前的解决方法是从Tomcat中启用的密码中删除Diffie-Hellman密码.我还没有尝试升级到Python 3.3. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |