我有一個在JBoss下運行的Java編寫的REST API。最近我們將JVM從1.6更新爲1.7。這開始導致只有我們連接的Python客戶端出現問題。間歇地,Python客戶端正在握手失敗。我們寫了一個非常簡單的測試,重新產生此問題:Python下的間歇性「sslv3警報握手失敗」
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)
這似乎是正確的,但我不知道。如果它在每次通話中失敗,那將是一回事,但僅僅失去隨機時間真的很奇怪。任何人看到這個?
您是否刪除了所有DHE密碼或只是您列出的密碼?由於安全掃描投訴支持弱密碼,我已經縮減了我的密碼列表。這是我目前使用的名單: SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA –
我只是刪除了DHE密碼和握手錯誤都沒有了。萬分感謝。不知道我會找到那個! –