我想告诉大家一个与Java 1.8升级后许多人似乎都遇到的问题。虽然并非所有解决方案都相同,但我会发布我是如何解决这个问题的。
但首先... 这不是一个适用于生产系统的解决方案,因为安全性被有效降低了。然而,如果您在测试等方面受阻,它可能非常合适。
我的问题是无论我做了什么...启用SSLv3等,我总是收到
"javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure".
以下是我采取的步骤来“解决”这个问题。
首先,我通过 OpenSSL 发现了服务器使用的密码。
openssl s_client -host yourproblemhost.com -port 443
这将产生(在最后...)
SSL-Session:
Protocol : TLSv1.2
Cipher : RC4-MD5
现在,我们需要使用哪些 Java 技术来启用该密码?在Oracle 链接中,它列出了名称及其 Java 对应项。因此,对于 RC4-MD5,我们有 SSL_RSA_WITH_RC4_128_MD5。好的,现在我添加了一个系统属性。
-Dhttps.cipherSuites=SSL_RSA_WITH_RC4_128_MD5
在我的代码中...
Security.setProperty("jdk.tls.disabledAlgorithms", "" /*disabledAlgorithms */ );
再次强调,这是绝对的最后一招“修复”......但如果你正在为了测试而费尽心思而无法运行它,希望这个方法能够有所帮助。