当前位置: 首页 > 知识库问答 >
问题:

Python下间歇性“sslv3警报握手失败”

佟嘉祯
2023-03-14

我有一个用Java编写的REST API,在JBoss下运行。最近我们将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, request_uri, method, body, 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)

这似乎是正确的,但我不确定。如果每次通话都失败了,那将是一回事,但只是随机失败一次真的很奇怪。有人看到这个吗?

共有2个答案

越开畅
2023-03-14

从Java6升级到Java7后,我遇到了同样的问题。

我调试了一下,结果发现这是Java7的DHE密码套件实现中的一个错误:大约0.5%的DHE密码套件SSL握手失败。(它与Python无关,该错误也可以用例如“openssl”命令行工具复制。)

我已经向Oracle报告了这个bug,请参阅http://mail.openjdk.java.net/pipermail/security-dev/2013-May/007435.html了解详细信息。与此同时,唯一的解决方法是禁用DHE密码套件(在两端)。

顾昌翰
2023-03-14

我在用Python 2.6连接Tomcat 7 (Java 1.7)时遇到了同样的间歇性错误。

当我将JVM从1.7u1升级到1.7u6时,我第一次遇到了这个问题。从本文来看,Java中的密码首选顺序似乎发生了变化:

Java 7 和无法生成 DH 密钥对

在 JVM 升级之前,SSL_RSA_WITH_3DES_EDE_CBC_SHA是用于 SSL 通信的首选密码。升级后,SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA将获得首选项。95%的情况下,SSL通信正常。但5%的情况下,正如你所描述的那样,它失败了。

似乎Python在迪菲-赫尔曼密码方面有问题。Python 3.3 中有一个修复程序:

http://bugs.python.org/issue13626

我目前的解决方法是从Tomcat中启用的密码中删除Diffie-Hellman密码。我还没有尝试升级到Python3.3。

 类似资料:
  • 我打以下电话给branch.io 它在我的本地机器上运行良好,但在服务器上出现故障。 Openssl版本: 本地:OpenSSL 0 . 9 . 8 ZG 2015年7月14日 服务器:OpenSSL 0.9.8e-fips-rhel5 2008年7月1日 Python: 本地:2.7.10服务器:2.7.6 分支io服务器连接: Chrome 已验证 DigiCert SHA2 安全服务器 CA

  • 问题内容: 我正在对branch.io进行以下调用 它在我的本地计算机上工作正常,但在服务器上失败。 OpenSSL版本: 本地:OpenSSL 0.9.8zg 2015年7月14日 伺服器:OpenSSL 0.9.8e-fips-rhel5 2008年7月1日 Python : 本地:2.7.10服务器:2.7.6 分支io服务器连接 : Chrome浏览器确认DigiCert SHA2 Sec

  • 我们有一个SSL问题,我是99%,这不是你通常的证书信任商店旋转木马。 我们有一个Weblogic服务器试图通过LDAPS与Active Directory建立SSL连接,底层SSL实现是JSSE。 有时,它是有效的。通常在重新启动Weblogic后的几个小时内。 之后,我们开始得到SSL握手错误,与SSL调试打开我们看到: [ACTIVE]ExecuteThread:'10'用于队列:'webl

  • 我使用的是运行在JDK7上的Liferay 6.2 CE GA2框架。当使用Apache http客户端调用话语论坛API时,它会抛出异常:javax.net.ssl.SSLHandshakeExc0019:收到致命警报:handshake_failure。 我认为这是因为*JDK7没有实现任何GCM密码套件。 话语论坛配置了SSL协议:TLSv1。2和强密码套件:TLS_ECDHE_ECDSA_

  • 我得到这个错误,而试图在linux上执行和旧的MapleStory服务器,我已经尝试了相同的文件在窗口和工作没有问题。我尝试了多个Java版本没有成功。