2013-01-05 15 views
7

JBoss altında çalışan Java'da yazılmış bir REST API'm var. Son zamanlarda JVM'yi 1,6'dan 1,7'ye güncelledik. Bu, yalnızca bağlanan Python istemcilerimizle ilgili sorunlara neden olmaya başladı. Zaman zaman, Python müşterileri el sıkışmalarına maruz kalıyor.Aralıklı "sslv3 uyarı anlaşması hatası" Python altında

import httplib2 

for i in range(1,500): 
    print i 
    response, content = httplib2.Http(disable_ssl_certificate_validation=True).request('https://server.com:8443',) 

aşağıdaki çıktıyı verin: Sorunu yeniden üreten çok basit bir test yazdı

. 
. 
. 
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 çağrı yoluyla bu kaçak başarısız, ama farklı zamanlarda testtir her zaman başarısız koşmak.

Diğer istemcilerimiz (Java, Groovy ve Ruby) sorunsuz çalışırlar.

JVM'yi 1.6'ya geri yüklerseniz, hatalar durur.

kullanıyorum bir Openssl kontrolü yaptım:

openssl s_client -connect server.com:8443 

ve bu döndürdü: Doğru görünüyor

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) 

, ama emin değilim. Her çağrıda başarısız olsaydı, bu bir şey olurdu, ama sadece rastgele bir kez başarısız olmak gerçekten garip. Bunu gören var mı?

cevap

5

Tomcat 7'ye (Java 1.7) Python 2.6 ile bağlanırken aynı aralıklı hatayı yaşıyorum.

JVM'yi 1.7u1'den 1.7u6'ya yükselttiğimde bu sorunu yaşamaya başladım. şifre tercih sırası Java değişmiş gibi bu makalede bakıldığında, görünür:

Java 7 and Could not generate DH keypair

JVM yükseltme önce, SSL_RSA_WITH_3DES_EDE_CBC_SHA SSL iletişim için kullanılan tercih edilen şifreleme oldu. Yükseltme işleminden sonra SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA tercih edilir. Zamanın% 95'i SSL iletişimi iyidir. Ama zamanın% 5'i, tarif ettiğiniz gibi başarısız.

Python'un Diffie-Hellman şifreleriyle ilgili problemleri var gibi görünüyor. o Tomcat benim etkinleştirilmiş şifrelerin gelen Diffie-Hellman şifre kaldırmak için

http://bugs.python.org/issue13626

Benim şu anki geçici çözüm: Python 3.3 bir düzeltme yoktur. Python 3.3'e yükseltmeyi denemedim.

+1

Tüm DHE şifrelerini mi yoksa sadece listelediğinizi mi sildiniz? Zayıf şifrelere destek hakkında şikayette bulunan güvenlik taramaları nedeniyle şifreler listemi kısaltmıştım.İşte şu anda kullanıyorum listesi: 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 –

+0

Sadece DHE şifrelere kaldırıldı ve el sıkışma hataları gitti. Bir ton teşekkürler. Bunu bulacağından emin değilim! –

0

Java 7.

için Java 6 yükselttikten sonra aynı sorunu yaşıyorum ben bu biraz ayıklanmış ve DHE şifre suit Java 7'nin uygulamasında bir hata olduğunu ortaya çıktı: SSL kabaca% 0.5 DHE şifre setleri için tokalaşma başarısız. (Python ile ilgili değildir ve hata, "openssl" komut satırı aracıyla da üretilebilir.)

Hata bildirimini Oracle'a bildirdim, ayrıntılar için bkz. http://mail.openjdk.java.net/pipermail/security-dev/2013-May/007435.html. Bu arada, tek geçici çözüm DHE şifreleme paketlerini devre dışı bırakmaktır (her iki uçta da).

İlgili konular