问题
前两天一个学弟在群里面问一个问题:
请问一下用阿里云服务器发送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