問題
前兩天一個學弟在群里面問一個問題:
請問一下用阿里雲服務器發送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