SSL握手失败 - Java 1.8

时间:2015-10-09 22:42:37

标签: java security ssl sslhandshakeexception

让大家知道我在升级到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-wise'来启用该密码?

Oracle link

在该链接中,它具有名称和Java对应物。所以对于RC4-MD5,我们有SSL_RSA_WITH_RC4_128_MD5。

好的,好的。现在我添加了一个System属性。

-Dhttps.cipherSuites=SSL_RSA_WITH_RC4_128_MD5

在我的代码中......

Security.setProperty("jdk.tls.disabledAlgorithms", "" /*disabledAlgorithms */ );

再次.. 这是一个绝对的最后手段'修复' ......但是如果你的头撞到墙上让它运行(进行测试),我希望它能进来是有用的。

4 个答案:

答案 0 :(得分:5)

使用JDK 1.8.0_51 release不再支持Java作为客户端(也作为服务器)来协商SSL握手,RC4被认为是弱(和受损)密码,这就是删除的原因

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

但是,您仍然可以通过从Java安全配置中删除jdk.tls.disabledAlgorithms中的RC4或使用setEnabledCipherSuites()方法

方法启用它们来启用它

然而,更好的解决方案是更新服务器配置(如果它在您的控制之下)以升级到更强的密码

  

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

关于使用Security.setProperty()进行设置的方法,因为fields which hold disabled algorithms are static and final是不可靠的,所以如果该类首先被加载,你就无法控制它,你也可以尝试创建一个属性文件

像这样

## override it to remove RC4, in disabledcipher.properties
jdk.tls.disabledAlgorithms=DHE

在您的JVM中,您可以将其称为系统属性,如此

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

答案 1 :(得分:1)

RC4被有效破解 - 14 years ago

  

Fluhrer,Mantin和Shamir(FMS)攻击,发表于 2001   论文" RC4"的密钥调度算法中的弱点   RC4密钥调度算法中的弱点的优点   从加密消息中重建密钥。

问题不在Java 8中。

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

答案 2 :(得分:0)

请注意,这里的根本原因是服务器。我只发布了这个来提供解决方案,直到可以修复服务器(很可能不在开发人员的控制之下)

答案 3 :(得分:-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