2012-04-17 18 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

回答