- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
当我尝试将 Java 8 应用程序连接到 Web 服务时,出现 SSLHandshakeException。
www.ssllabs.com说我 Web 服务不支持 TLSv1.1 和 TSLv1.2。
所以我执行 SSLPoke 时:
java -Djavax.net.debug=all -Djdk.tls.client.protocols="TLSv1" -Dhttps.protocol="TLSv1" SSLPoke ws.seur.com 443
我得到:
*** ClientHello, TLSv1
RandomCookie: GMT: 1450188882 bytes = { 215, 201, 145, 239, 52, 121, 175, 184, 120, 99, 193, 227, 113, 25, 222, 207, 145, 219, 37, 4, 82, 26, 128, 21, 217, 243, 4, 139 }
Session ID: {}
Cipher Suites: [TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_DSS_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, TLS_EMPTY_RENEGOTIATION_INFO_SCSV]
Compression Methods: { 0 }
Extension elliptic_curves, curve names: {secp256r1, sect163k1, sect163r2, secp192r1, secp224r1, sect233k1, sect233r1, sect283k1, sect283r1, secp384r1, sect409k1, sect409r1, secp521r1, sect571k1, sect571r1, secp160k1, secp160r1, secp160r2, sect163r1, secp192k1, sect193r1, sect193r2, secp224k1, sect239k1, secp256k1}
Extension ec_point_formats, formats: [uncompressed]
Extension server_name, server_name: [type=host_name (0), value=ws.seur.com]
***
[write] MD5 and SHA1 hashes: len = 171
0000: 01 00 00 A7 03 01 56 70 20 52 D7 C9 91 EF 34 79 ......Vp R....4y
0010: AF B8 78 63 C1 E3 71 19 DE CF 91 DB 25 04 52 1A ..xc..q.....%.R.
0020: 80 15 D9 F3 04 8B 00 00 2C C0 0A C0 14 00 35 C0 ........,.....5.
0030: 05 C0 0F 00 39 00 38 C0 09 C0 13 00 2F C0 04 C0 ....9.8...../...
0040: 0E 00 33 00 32 C0 08 C0 12 00 0A C0 03 C0 0D 00 ..3.2...........
0050: 16 00 13 00 FF 01 00 00 52 00 0A 00 34 00 32 00 ........R...4.2.
0060: 17 00 01 00 03 00 13 00 15 00 06 00 07 00 09 00 ................
0070: 0A 00 18 00 0B 00 0C 00 19 00 0D 00 0E 00 0F 00 ................
0080: 10 00 11 00 02 00 12 00 04 00 05 00 14 00 08 00 ................
0090: 16 00 0B 00 02 01 00 00 00 00 10 00 0E 00 00 0B ................
00A0: 77 73 2E 73 65 75 72 2E 63 6F 6D ws.seur.com
main, WRITE: TLSv1 Handshake, length = 171
[Raw write]: length = 176
0000: 16 03 01 00 AB 01 00 00 A7 03 01 56 70 20 52 D7 ...........Vp R.
0010: C9 91 EF 34 79 AF B8 78 63 C1 E3 71 19 DE CF 91 ...4y..xc..q....
0020: DB 25 04 52 1A 80 15 D9 F3 04 8B 00 00 2C C0 0A .%.R.........,..
0030: C0 14 00 35 C0 05 C0 0F 00 39 00 38 C0 09 C0 13 ...5.....9.8....
0040: 00 2F C0 04 C0 0E 00 33 00 32 C0 08 C0 12 00 0A ./.....3.2......
0050: C0 03 C0 0D 00 16 00 13 00 FF 01 00 00 52 00 0A .............R..
0060: 00 34 00 32 00 17 00 01 00 03 00 13 00 15 00 06 .4.2............
0070: 00 07 00 09 00 0A 00 18 00 0B 00 0C 00 19 00 0D ................
0080: 00 0E 00 0F 00 10 00 11 00 02 00 12 00 04 00 05 ................
0090: 00 14 00 08 00 16 00 0B 00 02 01 00 00 00 00 10 ................
00A0: 00 0E 00 00 0B 77 73 2E 73 65 75 72 2E 63 6F 6D .....ws.seur.com
[Raw read]: length = 5
0000: 15 03 01 00 02 .....
[Raw read]: length = 2
0000: 02 28 .(
main, READ: TLSv1 Alert, length = 2
main, RECV TLSv1.2 ALERT: fatal, handshake_failure
main, called closeSocket()
main, handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
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:2023)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1125)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:747)
at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:123)
at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:138)
at SSLPoke.main(SSLPoke.java:31)
如果我强制使用 TLSv1,为什么会收到 RECV TLSv1.2 ALERT: fatal, handshake_failure?
在 Java 7 上它工作正常但 Java 8 不工作。
最佳答案
如用户 1516873 的 answer 所示,客户端(Java 8u51 或更高版本)和服务器(ws.seur.com)不支持通用密码套件。 Java 8 更新 51 removed support for RC4 ciphers默认情况下在客户端中,因为 RC4 被认为是弱的和受损的。
Area: security-libs/javax.net.ssl Synopsis: Prohibit RC4 cipher suites
RC4 is now considered as a compromised cipher. RC4 cipher suites have been removed from both client and server default enabled cipher suite list in Oracle JSSE implementation. These cipher suites can still be enabled by SSLEngine.setEnabledCipherSuites() and SSLSocket.setEnabledCipherSuites() methods.
See JDK-8077109 (not public).
虽然最好的做法是联系 Web 服务提供商并让他们更新他们的 TLS 配置,但发行说明中描述了在客户端中启用 RC4 的解决方法。但是请注意,出于某种原因删除了对 RC4 的支持,并且通过重新启用它,您会将客户端的用户暴露在较低的安全标准下。
关于Java 8、TSL v1 和 javax.net.ssl.SSLHandshakeException : Received fatal alert: handshake_failure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34292351/
我正在尝试获取网站的 HTML 源代码。 我的代码: public static void main(String[] args) { URL url; InputStream is;
我在 https://www.ssllabs.com/ssltest/ 上运行了 ssl 证书测试我得到了很好的评价,但我看到一些设备旁边有错误,例如,在握手模拟下,Android 5.0 和 6.0
我的代码试图访问与应用程序位于同一服务器上的模板文件。在我们打开 SSL 之前一切正常。 现在,当连接到文件时,我得到一个 SSLHandshakeException: handshake_failu
我有一个在 docker 容器上的 tomcat (v8.0.44) 上运行的 Java 8 应用程序。此应用程序调用外部 https url(我无法提供 url),但出现以下错误: Exceptio
这个问题在这里已经有了答案: Warning: no suitable certificate found - continuing without client authentication (
我正在尝试使用 liferay 中的 javapns 库向我的设备发送推送通知。这是代码: private void pushNotification(ActionRequest actionRequ
我正在编写一个 Java 客户端(在 weblogic 10.3 上)来调用一个安全的网络服务。我已获得安装在 cacerts、DemoIdentity.jks 和 DemoTrust,jks 中的客
我雇用了一项网络服务,可以向手机发送短信。我尝试发出发布请求,但收到错误: Exception in thread "main" javax.net.ssl.SSLHandshakeException
我在 Tomcat 中授权 ssl 连接时遇到问题。我开发了使用证书连接到外部服务器的类。当我在命令行中运行它时它工作正常。但是当我从 Tomcat 中托管的 JSP 页面调用它时,会抛出如下异常:
我正在尝试使用 Java HTTP 客户端从 HTTPS 服务器下载图像... System.setProperty("javax.net.debug", "all"); System.setProp
我正在使用 quickfix 来验证服务器的证书并获得致命的 handshake_failure。 在我看来是这样的: 初始握手开始 客户端连接。 服务器接受。 在此期间发生 TLS 握手: o 密码
我正在尝试向我们的其中一个服务器 url 发送请求,但每当我尝试连接时,我都会收到这种期望 java.net.ConnectException: Received fatal alert: hands
可以看成是重复的问题。我已经遍历了与此问题相关的所有可能的 stackoverflow 线程,并且尝试了所有解决方案但没有运气。实际上,应用程序正在使用 httpclient-4.3.4.jar 并在
我正在尝试在我们的服务器(Ubuntu、SSL 证书)和我们的合作伙伴(通过 AS2 通信)之间建立连接。当合作伙伴尝试连接到我们的服务器时,他收到错误消息 HANDSHAKE_FAILURE。 由于
我正在尝试连接到启用了 SSL 的 LDAP 服务器。我不想使用身份验证,因此我覆盖了 SSLSocketFactory 以允许每个站点。我收到以下错误: main, handling excepti
我正在尝试使用带有 WolfSSL 的 tls1.2 将嵌入式设备连接到 smtp.gmail.com:465。该库创建并发送以下 clientHello 消息并收到握手失败消息。 16 03 03
iOS 推送通知 由于 handshake_failure 而失败,但它在我的本地机器上运行良好,但在部署到服务器时出现错误。 我正在使用 apns-0.1.5.jar 代码: static
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure 我在 soapui 中使用休息服务。我必须在命
当我使用 curl 查询时,logz.io 就像魅力一样: curl -XPOST 'https://api.logz.io/v1/query' --header "X-USER-TOKEN : VA
直到昨天(9 月 22 日),我的微服务在生产中运行良好,今天它在与 AWS Athena 通信时开始发出握手失败。 我已经检查了 SSL 证书,它似乎很好并且有效。 环境: Java 7, Tomc
我是一名优秀的程序员,十分优秀!