<分区>
Possible Duplicate:
SSL handshake alert: unrecognized_name error since upgrade to Java 1.7.0
我的 J2SE 应用程序使用 HttpsUrlConnection 访问安全位置。在我将我的 JRE 更新到 1.7 之前,它曾经工作得很好。现在我得到“握手期间远程主机关闭连接”SSLException。使用 -Djavax.net.debug=ssl:handshake 运行应用程序后,在 JRE 1.6 和 JRE 1.7 下,我的印象是在 1.7 下缓存的客户端 session 无法恢复。
更新: 我已经了解到,在 JRE 1.6 下,我的客户端应用程序使用 SSLv2Hello 封装。但是,它在 JRE 1.7 下不这样做,这很可能是导致异常的原因。我现在的问题是:如何为运行在 JRE 1.7 上的客户端启用 SSLv2Hello 封装?
更新#2: SSLv2Hello 通过 System.setProperty("https.protocols", "TLSv1,SSLv2Hello") 在 JRE 7 上完成。然而,这并没有使握手异常消失。事实证明,异常的真正原因是密码套件。在 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 恢复缓存 session 。使用 System.setProperty("https.cipherSuites", suggestedCipherSuites) 修补的问题,其中 suggestedCipherSuites 始终以 SSL_RSA_WITH_RC4_128_MD5 开头。这种方法有什么缺点吗?
更新 #3: 客户端的 SNI 扩展是困扰服务器的地方。请参阅 http://docs.oracle.com/javase/7/docs/technotes/guides/security/enhancements7.html 上的“JSSE 客户端的服务器名称指示 (SNI)”