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

原创 2017年01月24日 13:43:03

一.SSL/TLS的Handshake过程

在SSL/TLS的Handshake过程中,客户端与服务器之间需要交换参数,具体过程如下:

  1. 客户端提供其所支持的各种cipher suites(包含加密算法和Hash函数)
  2. 服务器从中选择自己也支持的cipher suite,并通知客户端,表明两者将以此进行数据传输
  3. 服务器同时将自己的数字证书(包括服务器名称、CA和公钥)作为标识符发给客户端
  4. 客户端向CA确认服务器的数字证书的有效性
  5. 客户端生成会话密钥(客户端与服务器之间后续的数据传输将使用此会话密钥)
    • 使用服务器的公钥加密会话密钥发送给服务器
    • 或者客户端也可以使用DH密钥交换


二.handshake_failure异常分析

在客户端与服务器之间进行SSL/TLS通信的过程中,常常发生如下异常:

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

首先,该异常发生的时机,是在客户端与服务器之间进行的Handshake的过程中,客户端与服务器之间的有效数据传输还没有开始。

原因一:针对上述Handshake的过程,该异常往往发生在第4步,即客户端得到服务器的数字证书时,向CA验证证书有效性时。

客户端在试图向可信CA进行验证时,发现服务器的数字证书所引用的CA,没有出现在客户端的trust store中。

原因二:此外,该异常也可能是由于客户端与服务器所使用的SSL/TLS版本不一致。服务器使用的TLS版本高,而客户端支持的TLS版本低。

这时,可以为客户端设置JVM参数如下,以提高客户端的TLS版本:

-Dhttps.protocols=TLSv1.2,TLSv1.1,TLSv1.0,SSLv3,SSLv2Hello

上述两种原因,都可以通过升级JDK到1.8解决。Java 8默认支持TLSv1.2版本。


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

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

在java程序中发送邮件会出现一个异常:javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure如果你的...

访问https,抛出的异常javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

话说这个坑有点深,查阅大半个百度几乎没解决 部分网友解释:是因为jdk中jce的安全机制导致报的错,按照大家的方式,要去oracle官网下载对应的jce包替换jdk中的jce包。 jce所在地址: ...

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

近期调试接口,出现一个很奇怪的问题,先说下环境: 服务器端 tomcat7 + jdk1.6 (64位) 业务代码使用jdk1.7开发的,使用jdk1.6版本编译, 客户端 使用jdk1.7开发,...

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

当eclipse下载插件时有这样的提示时需要去 oracle官网下载两个 jar包 JDK8 http://www.oracle.com/technetwork/java/javase/downlo...
  • apengg
  • apengg
  • 2017年02月16日 17:17
  • 1078

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

在用java发送邮件的时候遇到了这个问题: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure坑...
  • Healist
  • Healist
  • 2017年01月29日 01:52
  • 1445

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

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

解决 javax.net.ssl.SSLHandshakeException异常

我在使用qq邮件服务器时发生了如下异常: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure ...

jenkins配置SVN时报错:javax.net.ssl.SSLProtocolException: handshake alert: unrecognized_name

最近在学习jenkins,在配置SVN时发现老是会报错: javax.net.ssl.SSLProtocolException: handshake alert:  unrecognized_nam...
  • feierky
  • feierky
  • 2015年06月05日 12:07
  • 2096

CAS单点登录握手失败备忘

CAS单点登录遇到这个错误'javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure',首先得把证书ca...

java ssl协议使用:

ssl/tls 传输层协议简介:   SSL 是“Secure Sockets Layer”的缩写,中文叫做“安全套接层”。它是在上世纪90年代中期,由网景公司设计的。(顺便插一句,网景公司...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SSL/TLS的Handshake过程与javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure异常
举报原因:
原因补充:

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