Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SSL握手失败-Java 1.8_Java_Security_Ssl_Sslhandshakeexception - Fatal编程技术网

SSL握手失败-Java 1.8

SSL握手失败-Java 1.8,java,security,ssl,sslhandshakeexception,Java,Security,Ssl,Sslhandshakeexception,只是让大家知道我遇到的一个问题,很多人在升级到Java1.8后似乎遇到了这个问题。并非所有的解决方案都是相同的,因此我将如何解决这个问题 但是首先。。。这不是一个值得生产系统使用的解决方案,因为安全性正在被有效地降级。然而,如果你是阻塞测试等,它可能是非常合适的 我的问题是无论我做什么。。。已启用SSLv3等,我始终收到 "javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure". 以下是我为“解

只是让大家知道我遇到的一个问题,很多人在升级到Java1.8后似乎遇到了这个问题。并非所有的解决方案都是相同的,因此我将如何解决这个问题

但是首先。。。这不是一个值得生产系统使用的解决方案,因为安全性正在被有效地降级。然而,如果你是阻塞测试等,它可能是非常合适的

我的问题是无论我做什么。。。已启用SSLv3等,我始终收到

"javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure".
以下是我为“解决”这个问题所采取的步骤

首先,我发现了服务器使用的密码。我是通过openssl实现的

openssl s_client -host yourproblemhost.com -port 443
这会产生(最后…)

现在。。我们如何使用“Java智能”来启用该密码

在该链接中,它有名称和Java对应项。所以对于RC4-MD5,我们有SSL\u RSA\u和RC4\u 128\u MD5

好的,很好。现在我添加了一个系统属性

-Dhttps.cipherSuites=SSL_RSA_WITH_RC4_128_MD5
在我的代码中

Security.setProperty("jdk.tls.disabledAlgorithms", "" /*disabledAlgorithms */ );
再一次这绝对是最后的“修复”。。。但是,如果你为了让它运行(用于测试)而不顾一切,我希望它会有用。

Java不再支持RC4作为客户端(也作为服务器)来协商SSL握手,RC4被认为是弱密码(并且被破坏),这就是删除的原因

但是,您仍然可以通过从Java安全配置中删除
jdk.tls.disabledAlgorithms
中的RC4来启用它,或者使用
setEnabledChiperSuites()
方法编程启用它们

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

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

至于您使用
Security.setProperty()
设置它的方法,这是不可靠的,因为如果先加载该类,您无法控制它,您也可以尝试创建属性文件

像这样

## override it to remove RC4, in disabledcipher.properties
jdk.tls.disabledAlgorithms=DHE
java -Djava.security.properties=disabledcipher.properties blah...
在JVM中,您可以像这样将其称为系统属性

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

RC4有效地开裂了-

Fluhrer、Mantin和Shamir(FMS)攻击,发表在他们的2001上 论文“RC4密钥调度算法的弱点”,以 RC4密钥调度算法的一个弱点的优点是 从加密消息重建密钥

问题不在Java8中


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

感谢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