HTTPS握手失败javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure异常记录

问题:
项目中请求第三方接口:使用HTTPS进行通信。本地开发测试没有问题封板待第三方测试一起联调,过了近半个月时间再次测试联调请求一直报:Received fatal alert: handshake_failure
异常:

javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

网上解决方案尝试:

  1. 在网络请求前加上
    System.setProperty("https.protocols", "TLSv1.2,TLSv1.1,SSLv3");

  2. 可以设置JVM参数如下,以提高客户端的TLS版本
    -Dhttps.protocols=TLSv1.2,TLSv1.1,TLSv1.0,SSLv3,SSLv2Hello

  3. 升级jdk到1.8版本(改动影响较大,不考虑)

已上解决方案对我无效
问题重新排查:

  1. https://myssl.com/ 该网站可以检测SSL/TLS的服务
  2. 查看检测信息发现该接口协议支持TLS1.0, TLS1.1, TLS1.2, 但是服务器默认TLS1.2
  3. 接着往下看证书的兼容性测试发现jdk7的兼容性测试是×标志
  4. 问题很明显了,jdk1.7支持协议:SSLv2Hello 、SSLv3、TLSv1、TLSv1.1、TLSv1.2五种协议,但是默认协议是:TLSv1
  5. 问题搞定!
    原:SSLContext sc = SSLContext.getInstance(“TLS”);
    新:SSLContext sc = SSLContext.getInstance(“TLSv1.2”);

参考文章
https://blog.csdn.net/taiyangdao/article/details/54707184
https://www.cnblogs.com/chyingp/p/https-introduction.html
https://blog.csdn.net/u011519508/article/details/80570198

你可能感兴趣的:(记录)