Java调用Https接口:fatal, handshake_failure问题记录

一. 问题描述

HttpClient调用接口,报错:handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

二. 解决过程

1.添加jvm调试参数:-Djavax.net.debug = all

2.再次调用,后台查找报错日志如下:

[19-11-14 18:25:11:831 CST] 00000148 SystemOut     O %% No cached client session

[19-11-14 18:25:11:834 CST] 00000148 SystemOut     O *** ClientHello, SSLv3

[19-11-14 18:25:11:834 CST] 00000148 SystemOut     O RandomCookie:  GMT: 1556949639 bytes = { 231, 96, 186, 244, 145, 30, 114, 71, 90, 207, 180, 104, 232, 8, 244, 28, 140, 55, 85, 189, 149, 67, 246, 243, 191, 255, 105, 127 }

[19-11-14 18:25:11:835 CST] 00000148 SystemOut     O Session ID:  {}

[19-11-14 18:25:11:835 CST] 00000148 SystemOut     O Cipher Suites: [TLS_EMPTY_RENEGOTIATION_INFO_SCSV, SSL_RSA_WITH_RC4_128_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, SSL_RSA_WITH_RC4_128_MD5]

[19-11-14 18:25:11:835 CST] 00000148 SystemOut     O Compression Methods:  { 0 }

[19-11-14 18:25:11:835 CST] 00000148 SystemOut     O Extension server_name, server_name: [host_name: yunpan.ccccltd.cn]

[19-11-14 18:25:11:835 CST] 00000148 SystemOut     O ***

[19-11-14 18:25:11:835 CST] 00000148 SystemOut     O [write] MD5 and SHA1 hashes:  len = 83

[19-11-14 18:25:11:835 CST] 00000148 SystemOut     O 0000: 01 00 00 4f 03 00 5d cd  2b 87 e7 60 ba f4 91 1e  ...O............
0010: 72 47 5a cf b4 68 e8 08  f4 1c 8c 37 55 bd 95 43  rGZ..h.....7U..C
0020: f6 f3 bf ff 69 7f 00 00  0c 00 ff 00 05 00 0a 00  ....i...........
0030: 16 00 13 00 04 01 00 00  1a 00 00 00 16 00 14 00  ................
0040: 00 11 79 75 6e 70 61 6e  2e 63 63 63 63 6c 74 64  ..yunpan.ccccltd
0050: 2e 63 6e                                           .cn


[19-11-14 18:25:11:835 CST] 00000148 SystemOut     O WebContainer : 3, WRITE: SSLv3 Handshake, length = 83

[19-11-14 18:25:11:835 CST] 00000148 SystemOut     O [Raw write]: length = 88

[19-11-14 18:25:11:836 CST] 00000148 SystemOut     O 0000: 16 03 00 00 53 01 00 00  4f 03 00 5d cd 2b 87 e7  ....S...O.......
0010: 60 ba f4 91 1e 72 47 5a  cf b4 68 e8 08 f4 1c 8c  .....rGZ..h.....
0020: 37 55 bd 95 43 f6 f3 bf  ff 69 7f 00 00 0c 00 ff  7U..C....i......
0030: 00 05 00 0a 00 16 00 13  00 04 01 00 00 1a 00 00  ................
0040: 00 16 00 14 00 00 11 79  75 6e 70 61 6e 2e 63 63  .......yunpan.cc
0050: 63 63 6c 74 64 2e 63 6e                           ccltd.cn


[19-11-14 18:25:11:849 CST] 00000148 SystemOut     O [Raw read]: length = 5

[19-11-14 18:25:11:849 CST] 00000148 SystemOut     O 0000: 15 03 00 00 02                                     .....


[19-11-14 18:25:11:849 CST] 00000148 SystemOut     O [Raw read]: length = 2

[19-11-14 18:25:11:849 CST] 00000148 SystemOut     O 0000: 02 28                                              ..


[19-11-14 18:25:11:850 CST] 00000148 SystemOut     O WebContainer : 3, READ: SSLv3 Alert, length = 2

[19-11-14 18:25:11:850 CST] 00000148 SystemOut     O WebContainer : 3, RECV TLSv1 ALERT:  fatal, handshake_failure

[19-11-14 18:25:11:850 CST] 00000148 SystemOut     O WebContainer : 3, called closeSocket()

[19-11-14 18:25:11:850 CST] 00000148 SystemOut     O WebContainer : 3, handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

[19-11-14 18:25:11:850 CST] 00000148 SystemOut     O WebContainer : 3, called close()

[19-11-14 18:25:11:850 CST] 00000148 SystemOut     O WebContainer : 3, called closeInternal(true)

[19-11-14 18:25:11:850 CST] 00000148 SystemOut     O WebContainer : 3, called close()

[19-11-14 18:25:11:850 CST] 00000148 SystemOut     O WebContainer : 3, called closeInternal(true)

[19-11-14 18:25:11:850 CST] 00000148 SystemOut     O WebContainer : 3, called close()

[19-11-14 18:25:11:850 CST] 00000148 SystemOut     O WebContainer : 3, called closeInternal(true)

[19-11-14 18:25:11:856 CST] 00000055 SystemOut     O [Raw read]: length = 5

[19-11-14 18:25:11:856 CST] 00000055 SystemOut     O 0000: 17 03 01 02 a0  

3.根据日志,结合SSL/TLS协议(如下图),分析报错原因:

客户端发起ClientHello,发送给服务端RandomCookie,Session ID,Cipher Suites等信息,服务端接收到信息后,验证是否支持客户端要求TLS版本,算法等信息,如果支持,会发送证书等信息给客户端,不支持,则保守失败,日志里的报错确实发生在这一阶段,所以原因可能是:

①服务端不支持客户端的TLS协议版本

②服务端不支持客户端有的所有加密算法

4.确认服务端支持协议版本,加密算法信息

通过ssl分析网站:https://www.ssllabs.com/ssltest/,得到如下结果:

服务器是支持TLS1.1的,但是不支持加密算法(使用的IBM jdk 1.7)。

4.代码解决握手失败问题

待更新~

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据提供的引用内容,"尝试连线已失败。Received fatal alert: handshake_failure" 是一个错误消息,通常在进行网络连接时出现。这个错误消息表示在进行握手过程时发生了致命错误。 握手是在建立安全的网络连接时进行的过程,它涉及到客户端和服务器之间的交互,以确保双方可以安全地通信。当握手过程中发生错误时,就会出现"Received fatal alert: handshake_failure" 错误消息。 这个错误可能有多种原因,包括但不限于以下几点: 1. 客户端和服务器之间的协议不匹配。例如,客户端使用的是TLSv1.2,而服务器只支持TLSv1.0。 2. 客户端和服务器之间的加密套件不匹配。例如,客户端只支持AES加密算法,而服务器只支持DES加密算法。 3. 客户端和服务器之间的证书验证失败。例如,服务器的证书已过期或不受信任。 4. 客户端和服务器之间的网络连接存在问题。例如,网络延迟或丢包导致握手失败。 为了解决这个问题,可以尝试以下几个步骤: 1. 确保客户端和服务器之间的协议和加密套件匹配。可以尝试升级客户端或服务器的软件版本,以支持更新的协议和加密套件。 2. 检查服务器的证书是否有效并受信任。可以尝试更新服务器的证书或将其添加到客户端的信任列表中。 3. 检查网络连接是否正常。可以尝试重新连接网络或使用其他网络进行测试。 请注意,具体的解决方法可能因具体情况而异。如果问题仍然存在,建议查看相关日志文件或联系网络管理员以获取更多帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值