2012-04-17 17 views
3

可能重複:
SSL handshake alert: unrecognized_name error since upgrade to Java 1.7.0異常SSLException而恢復緩存的會話

我的J2SE應用程序使用HttpsURLConnection的訪問安全的位置。它曾經工作得很好,直到我更新我的JRE到1.7。現在我得到了「握手期間遠程主機關閉的連接」SSLException。在JRE 1.6和JRE 1.7下使用-Djavax.net.debug = ssl:handshake運行應用程序後,我的印象是在1.7以下,緩存的客戶端會話無法恢復。

UPDATE: 我已經明白,在JRE 1.6下我的客戶端應用程序使用SSLv2Hello封裝。然而,它不會在JRE 1.7下這樣做,這很可能是導致異常的原因。我的問題是現在這個:我如何爲在JRE 1.7上運行的客戶端啓用SSLv2Hello封裝?

更新#2: SSLv2Hello經由System.setProperty完成上JRE 7( 「https.protocols」, 「使用TLSv1,SSLv2Hello」)。但是,這並沒有使握手例外消失。原來,這個例外的真正原因是密碼套件。在JRE 6上,服務器從客戶端選項中選擇SSL_RSA_WITH_RC4_128_MD5,而在JRE 7上,它總是與TLS_DHE_RSA_WITH_AES_128_CBC_SHA一起使用。出於某種原因,服務器無法使用TLS_DHE_RSA_WITH_AES_128_CBC_SHA恢復緩存會話。使用System.setProperty修補問題(「https.cipherSuites」,suggestedCipherSuites),其中suggestedCipherSuites始終以SSL_RSA_WITH_RC4_128_MD5開頭。這種方法有什麼缺點?

UPDATE#3: 客戶端的SNI擴展是什麼困擾服務器。請參閱「JSSE客戶端的服務器名稱指示(SNI)」,地址爲http://docs.oracle.com/javase/7/docs/technotes/guides/security/enhancements7.html

回答