SSL/TLS的Handshake过程与javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure异常
来源:互联网 发布:中学生网络诈骗 编辑:程序博客网 时间:2024/05/16 07:24
一.SSL/TLS的Handshake过程
在SSL/TLS的Handshake过程中,客户端与服务器之间需要交换参数,具体过程如下:
- 客户端提供其所支持的各种cipher suites(包含加密算法和Hash函数)
- 服务器从中选择自己也支持的cipher suite,并通知客户端,表明两者将以此进行数据传输
- 服务器同时将自己的数字证书(包括服务器名称、CA和公钥)作为标识符发给客户端
- 客户端向CA确认服务器的数字证书的有效性
- 客户端生成会话密钥(客户端与服务器之间后续的数据传输将使用此会话密钥)
- 使用服务器的公钥加密会话密钥发送给服务器
- 或者客户端也可以使用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版本。
2 0
- SSL/TLS的Handshake过程与javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure异常
- SSL/TLS的Handshake过程与javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure异常
- SSL/TLS的Handshake过程与javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure异常
- 访问https,抛出的异常javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
- javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
- javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
- javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
- eclipse javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
- 使用Java访问https接口javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
- ios信息推送 异常 javax.net.ssl.SSLHandshakeException: Received fatal alert: handshak
- SSLHandshakeException: Received fatal alert: handshake_failure
- javax.net.ssl.SSLHandshakeException: Handshake failed
- javax.net.ssl.SSLProtocolException: handshake alert: unrecognized_name
- javax.net.ssl.SSLProtocolException: handshake alert: unrecognized_name
- javax.net.ssl.SSLProtocolException: handshake alert: unrecognized_name
- javax.net.ssl.SSLProtocolException: handshake alert:unrecognized_name
- javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
- 使用https出错javax.net.ssl.SSLHandshakeException: Handshake failed
- 在阿里O2O仓储解决方案公司担任系统架构师
- 解决NSTimer在TableView滑动中暂停问题
- Shiro教程之注解式&jsp标签授权
- 让我们来比较C#,C++和Java之间重写虚函数的区别
- 分析软件工程师必备技能
- SSL/TLS的Handshake过程与javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure异常
- HDU 1215 七夕节(打表)
- 各浏览器页面滚动值(scrollTop)的获取与设定。
- 无线随机运动-原生JS详解
- youcompleteme unavailable: no module named "future"解决
- 全网服务器数据备份解决方案
- 【OpenJudge】配对碱基链
- MySQL Group Replication调研剖析
- 微信小程序java实现AES解密并获取unionId