SSL异常javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

我报了这个异常,传说这个异常的原因多种多样,一般情况下是因为jdk的BUG导致。相关原理可以访问https://stackoverflow.com/questions/6353849/received-fatal-alert-handshake-failure-through-sslhandshakeexception

而我依次使用了以下方法
1. 我是使用的jdk 1.7 ,然后升级到1.8就没有问题
2. 有时候升级没有用,可能是jdk内的jar包版本不对,需要去下载更新:
jdk 7 http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
jdk 8 http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
3. 还有一个传说,改代码强制使代码使用XX版本即可,我试了下没用,你可以试试:
System.setProperty(“https.protocols”, “TLSv1.2,TLSv1.1,SSLv3”);
4. 有的时候是别的原因,你可能需要打开-Djavax.net.debug=all的虚拟机参数去看发生了什么。这个参数我是看不懂…只是找了一些关键字
5. 这个时候你还可以使用https://myssl.com/去查一下你访问的网址支持哪些协议。我发现我的接口只支持TLSv1.2,然后我jdk是7,不能升级。于是写代码和安装jce强制使用:
以下使用httpclient 4.5.6

SSLContext sslContext = SSLContext.getDefault();

      SSLConnectionSocketFactory sslConnectionFactory = new SSLConnectionSocketFactory(
          sslContext,
          new String[]{"TLSv1.2"},
          null,
          NoopHostnameVerifier.INSTANCE);

      Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
          .register("https", sslConnectionFactory)
          .register("http", PlainConnectionSocketFactory.INSTANCE)
          .build();

      HttpClientConnectionManager ccm = new BasicHttpClientConnectionManager(registry);

httpclient = HttpClientBuilder.create().
          .setSSLSocketFactory(sslConnectionFactory)
          .setConnectionManager(ccm)
          .build();

正常了。其中的关键在于修改sslConnectionFactory。如果你使用其它的jar或者原生程序,只需要设定改写Factory即可。

感谢:
https://blog.csdn.net/sun5769675/article/details/81322324
http://ligaosong.iteye.com/blog/2356346
https://stackoverflow.com/questions/6353849/received-fatal-alert-handshake-failure-through-sslhandshakeexception

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页
评论 2

打赏作者

fsafs168

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值