SSLHandshakeException: Received fatal alert: handshake_failure

原创 2017年05月15日 18:47:02
  1. 问题出现:
    jdk版本从7升级到8之后,出现ssl异常信息:具体错误信息如下:

    这里写图片描述


  1. 问题定位
    关于ssl握手异常,网上有很多。大多数的解决方式都是修改protocols、cipherSuites、修改${JAVA_HOME}/lib/security的local_policy.jar、US_export_policy.jar或者修改jdk版本。
    在尝试了所有的方法法之后,还是握手异常。最后在启动java程序时,新增了调试参数
    -Djavax.net.debug=all
    可以开启加密协议的调试模式。
    对比握手成功和握手失败的协议报文,发现握手失败报文缺少Cipher Suites没有RC4相关的加密算法(SSL_RSA_WITH_RC4_128_SHA)。
    在查看客户端连接的代码发现,在创建SSLConnectionSocketFactory没有指定支持的protocols和Cipher Suites。导致ssl握手过程中使用了jdk8默认的ssl协议TLSv1.2,并且jdk8默认的Cipher Suites禁用了RC4算法。最终导致握手失败。
    修复代码如下:
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
                    sslcontext,
                    new String[]{"TLSv1","TLSv1.1","TLSv1.2"},
                    new String[]{"SSL_RSA_WITH_RC4_128_SHA"},
                    new NoopHostnameVerifier()
            );

修改之后还是握手异常!

  1. 问题再定位
    因为在从JDK 1.8.0_u60开始,默认禁止了RC4这个算法。可以在{JRE_HOME}/lib/security/java.security找到相关配置:

jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 768

以及

jdk.tls.legacyAlgorithms= \
K_NULL, C_NULL, M_NULL, \
DHE_DSS_EXPORT, DHE_RSA_EXPORT, DH_anon_EXPORT, DH_DSS_EXPORT, \
DH_RSA_EXPORT, RSA_EXPORT, \
DH_anon, ECDH_anon, \
RC4_128, RC4_40, DES_CBC, DES40_CBC

  1. 问题解决

启用Java的RC4算法

方法一:
修改 {JRE_HOME}\lib\security\java.security文件如下:
这里写图片描述

方法二:
在代码中指定属性如下:

        Security.setProperty("jdk.tls.disabledAlgorithms","SSLv3, DH keySize < 768");

然后启用相关的协议和Cipher Scites。

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

SSL/TLS的Handshake过程与javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure异常

一.SSL/TLS的Handshake过程 在SSL/TLS的Handshake过程中,客户端与服务器之间需要交换参数,具体过程如下: 客户端提供其所支持的各种cipher suites(包含...

Charles Android 抓包失败SSLHandshake: Received fatal alert: certificate_unknown

前提:Android使用Charles抓取Https请求的报文时,Android和Charles都正确安装了证书之后出现抓包失败,报错SSLHandshake: Received fatal aler...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

OkHttp报错javax.net.ssl.SSLHandshakeException: Handshake failed

在开发中,使用的数据请求是Okhttp进行数据请求,当请求到Https的时候,出行证书错误,我的使用场景是,获取省市县三级地址数据,在模拟器上ok的,但当使用真机测试的时候发现,无法获取数据,而且报错...

使用https出错javax.net.ssl.SSLHandshakeException: Handshake failed

最近项目中要用到https,android这边使用的是httpsurlconnection来进行访问的。其中遇到了一个非常诡异的问题,在此记录下来,以供参考: 注:https 的证书是后台自己生成的,...

com.android.volley.NoConnectionError: javax.net.ssl.SSLHandshakeException: Handshake failed

上班上的好好的,一个其他部门的同事来着手机来说,APP在他的手机上登录不进去。 实在是最近没有进行升级,在其他手机上也是好好的呀 ~~~ 然后他说他以前也是好的,最近手机升级了一次。一查看版本,A...
  • shxixi
  • shxixi
  • 2016-04-06 11:17
  • 3210

解决jdk1.8中发送邮件失败(handshake_failure)问题

暑假在家做一个类似知乎的问答型网站(代码可见:Github/wenda 喜欢的可以给个star或者自己fork然后修改,目前功能还未很完善),其中有一个站内邮件通知系统(这里简单的讲一个例子:如果用...

fatal: unable to access 'https://android.googlesource.com/platform/frameworks/volley/': Received HTT

问题来源想感受下Volley的魅力,需要 git clone https://android.googlesource.com/platform/frameworks/volley 但是,出现这个!!...

LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt

问题描述: 使用VS2010新创建了一个WIN32工程。编译时报错LINK : fatal error LNK1123: failure during conversion to COFF: fil...

LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt

from:http://blog.csdn.net/junjiehe/article/details/16888197 使用VisualStudio 编译链接中可能出现如下错误: LINK :...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)