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版本。


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

相关文章推荐

java mail Received fatal alert: handshake_failure

dk里面有一个jce的包,安全性机制导致的访问https会报错,官网上有替代的jar包,换掉就好了 包在这里 http://www.oracle.com/technetwork/java/javas...

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

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

Java SSL/TLS 安全通讯协议介绍

原文:http://www.ibm.com/developerworks/cn/java/j-lo-ssltls/ Java 的安全通讯 刘 进, 高级软件工程师 , ...

解决 javax.net.ssl.SSLHandshakeException异常

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

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

在用java发送邮件的时候遇到了这个问题: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure坑...

java RSA加密解密实现

该工具类中用到了BASE64,需要借助第三方类库:javabase64-1.3.1.jar 下载地址:http://download.csdn.net/detail/centralperk/5025...

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

当eclipse下载插件时有这样的提示时需要去 oracle官网下载两个 jar包 JDK8 http://www.oracle.com/technetwork/java/javase/downlo...

Java实现iOS推送握手失败的解决办法

使用Java语言实现iOS推送时常常出现以下错误信息: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_fai...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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