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

延伸阅读:

  • TLS整理(上):我们为啥需要TLS
  • TLS整理(下):TLS如何保证安全
  • https站点强制通信协议TLSv1.2

你可能感兴趣的:(经验总结)