【问题标题】:javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure [duplicate]javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure [重复]
【发布时间】:2016-11-07 07:44:20
【问题描述】:

我在两天内尝试了许多选项后发布了这个问题。以下是我尝试过的选项。

  1. 禁用 ssl 证书验证
  2. 通过从浏览器下载 crt 并转换为 .jks 并导入密钥库。

我仍然遇到这个问题,任何帮助都非常感谢。

javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1943)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1059)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1294)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1321)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1305)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:523)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1296)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
at com.honeywell.sensibo.api.NewMain.main(NewMain.java:73)

【问题讨论】:

标签: java jakarta-ee ssl-certificate


【解决方案1】:

问题已解决。!!!以下是解决方案。

对于 Java 6: 将以下 jars 添加到 {JAVA_HOME}/jre/lib/ext 中。 1. bcprov-ext-jdk15on-154.jar 2. bcprov-jdk15on-154.jar

将属性添加到 {JAVA_HOME}/jre/lib/security/java.security security.provider.1=org.bouncycastle.jce.provider.BouncyCastleProvider

Java 7:从以下链接下载 jar 并添加到 {JAVA_HOME}/jre/lib/security http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html

Java 8:从以下链接下载 jar 并添加到 {JAVA_HOME}/jre/lib/security http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

问题是256位加密解密失败。

【讨论】:

  • Amaznig 和 mos 有用的解决方案
  • 这似乎确实解决了问题。我不知道是否要为此对 Oracle 或 Sourceforge 翻白眼。 (没有人会注意到。)我的问题是 Eclipse 无法下载 Jaspersoft Studio 插件更新和 PMD 插件更新,它们都是从 SourceForge 下载站点下载的。我是从the jaspersoft site 指向这里的。
  • 在 Windows 10 64 位中做了准确的步骤,但没有运气
  • 在 Windows 10 上,我必须同时执行 Win7 和 security.provider 步骤。此外,我还必须使用管理员凭据通过命令行逐步复制 jars。
  • @frostmann 好吧,我有(记忆...告诉我我做了什么...)在 Windows 上执行BouncyCastleProvider 步骤 Java 8 步骤七。希望对您有所帮助,这些问题似乎很难解决。
【解决方案2】:

我最近遇到了类似的错误,因为最近的 JDK(和浏览器,以及 Linux TLS 堆栈等)拒绝与我客户公司网络中的某些服务器通信。原因是该网络中的某些服务器仍然具有 SHA-1 证书。

请看: https://www.entrust.com/understanding-sha-1-vulnerabilities-ssl-longer-secure/ https://blog.qualys.com/ssllabs/2014/09/09/sha1-deprecation-what-you-need-to-know

如果这是您当前的情况(最近的 JDK 与已弃用的证书加密),那么您最好的举措是将您的网络更新为适当的加密技术

如果您应该为此提供临时解决方案,请查看其他答案以了解如何使您的 JDK 信任或不信任某些加密算法:

How to force java server to accept only tls 1.2 and reject tls 1.0 and tls 1.1 connections

无论如何,我坚持认为,如果我猜对了您的问题,这不是解决问题的好方法,您的网络管理员应该考虑删除这些已弃用的证书并获取新证书。

【讨论】:

  • 您好 Jorge,因为我正在运行独立程序,所以尝试了第二个选项。仍然没有运气。使用 Java 1.7.0_02。
  • 按照上面链接中的建议尝试了 1.7.0_80。没有运气。!!!
  • 我原以为它可以与 1.7.0_02 而不是 1.7.0_80 一起使用。两次失败都可能意味着我的猜测是完全错误的,而你的问题是不同的。您是否尝试过其他测试?例如,尝试获取违规 URL 或使用最新版本的 Chrome 访问它,以查看其他 SSL 堆栈是否可以处理它
  • 是的,Jorge,该 URL 与 Chrome、Posters、J-meter、SoapUI 完全兼容。影响我有 python 客户端,它绝对没有问题。但只有 Java 客户端失败了。
  • 好的,在这种情况下,我会尝试丢弃一些东西。您确定将证书导入密钥库的过程吗?您如何告诉 Java 使用该密钥库?您可以尝试将证书直接导入您的 $JAVA_HOME/jre/lib/security/cacerts 以确保 JDK 正在使用该证书。如果可行,我们可以撤消该测试并专注于将 .jks 文件导入应用程序的方式