SSL握手失败 - Java 1.8

9

我想告诉大家一个与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 */ );

再次强调,这是绝对的最后一招“修复”......但如果你正在为了测试而费尽心思而无法运行它,希望这个方法能够有所帮助。

3个回答

5

随着 JDK 1.8.0_51 发布, RC4 不再受 Java 客户端(也包括服务端)用于协商 SSL 握手的支持,RC4 被认为是弱密码(且被攻破),这就是被移除的原因。

http://bugs.java.com/view_bug.do?bug_id=8076221

您仍然可以通过从Java安全配置中删除RC4的jdk.tls.disabledAlgorithms或使用setEnabledCipherSuites()方法编程启用它。但更好的解决方案是更新服务器配置(如果在您的控制范围内),升级到更强大的密码套件。

RC4现在被认为是一种受损的密码套件。Oracle JSSE实现已从客户端和服务器默认启用的密码套件列表中删除了RC4密码套件。这些密码套件仍然可以通过SSLEngine.setEnabledCipherSuites()SSLSocket.setEnabledCipherSuites()方法启用。

至于您使用Security.setProperty()进行设置的方法,这不是一种可靠的方式,因为持有禁用算法的字段是静态和最终的,所以如果该类首先加载,您将无法控制它。您可以尝试创建一个属性文件来代替。
## override it to remove RC4, in disabledcipher.properties
jdk.tls.disabledAlgorithms=DHE

在您的JVM中,您可以像这样将其表示为系统属性

java -Djava.security.properties=disabledcipher.properties blah...

2

RC4已经被有效破解 - 14年前

弗卢赫尔(Fluhrer)、曼廷(Mantin)和沙米尔(Shamir)在他们的2001年论文“RC4密钥调度算法的弱点”中发表了FMS攻击,利用RC4密钥调度算法的弱点从加密消息中重建密钥。

问题不在于Java 8。

问题在于您的服务器正在使用RC4。


在我的评论中,我说过..."然而,更好的解决方案是更新服务器配置(如果您有控制权)以升级到更强的加密算法"是的.. 这是一个服务器问题。这就是问题所在。我只是发布这个来提供一个解决方法,直到服务器(可能完全不受开发者控制)得到修复。祝好,詹姆斯 - James

-1

感谢Alton分享这样一个救命信息。 只有一件事我想改变 因为

openssl s_client -host yourproblemhost.com -port 443
returned ->
Protocol  : TLSv1.2
Cipher    : 0000
openssl s_client -connect X.X.X.X:993  -prexit -tls1
returned -> the expected response as
Protocol  : TLSv1
Cipher    : RC4-MD5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接