javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake

问题

前两天一个学弟在群里面问一个问题:

请问一下用阿里云服务器发送https请求为什么会失败,是需要有些其他什么配置吗?
同样的代码本地可以访问https接口,服务器不行,而且服务器可以访问http接口。
用的HttpsURLConnection

觉得挺有意思,就叫他把请求的URL给一下,然后我在机器上用curl命令测试了一把: 这里写图片描述

发现报了与ssl有关的错误,我推测可能与https证书有关。 但是他的代码和服务器我都接触不到,只好叫他把catalina.out里面的日志给我看下。

果然在日志里面发现了一个与ssl相关的Exception:

javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
	at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1002)
	... more
Caused by: java.io.EOFException: SSL peer shut down incorrectly
	at sun.security.ssl.InputRecord.read(InputRecord.java:505)
	... more 

原因

ok,找到Exception就好办了,拿着错误信息上百度搜一下解决方法就有了~

网上说的是TLS版本的问题,jdk1.7默认的TLS版本是1.0,将TLS版本改成1.1或者1.2就好了

解决方法

有人在Stack Overflow提了相同的问题,并且大牛们也给了相应的解决方案: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake during web service communicaiton

延伸阅读:

转载于:https://my.oschina.net/liuxiaomian/blog/1817186

原文地址:https://www.cnblogs.com/twodog/p/12136853.html