javax.net.ssl.SSLHandshakeException:握手期间远程主机关闭连接

Posted

技术标签:

【中文标题】javax.net.ssl.SSLHandshakeException:握手期间远程主机关闭连接【英文标题】:javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake 【发布时间】:2017-01-07 23:01:56 【问题描述】:

我正在启动从我的 Web 应用程序下载的 JNLP。 在提示 Java 安全警告提示后,如果用户响应在 2-3 秒内,则应用程序可以成功运行。但是,如果用户响应 Java 安全警告提示的时间超过 3 秒,应用程序将无法运行并出现以下套接字异常:

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

handshake
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:946)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake

(SSLSocketImpl.java:1312)
    at sun.security.ssl.SSLSocketImpl.startHandshake

(SSLSocketImpl.java:1339)
    at sun.security.ssl.SSLSocketImpl.startHandshake

(SSLSocketImpl.java:1323)
    at sun.net.www.protocol.https.HttpsClient.afterConnect

(HttpsClient.java:563)
    at 

sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect

(AbstractDelegateHttpsURLConnection.java:185)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream

(HttpURLConnection.java:1300)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream

(HttpsURLConnectionImpl.java:254)
    at com.sun.deploy.net.HttpUtils.followRedirects(Unknown Source)
    at com.sun.deploy.net.BasicHttpRequest.doRequest(Unknown Source)
    at com.sun.deploy.net.BasicHttpRequest.doGetRequestEX(Unknown Source)
    at com.sun.deploy.cache.ResourceProviderImpl.checkUpdateAvailable

(Unknown Source)
    at com.sun.deploy.cache.ResourceProviderImpl.isUpdateAvailable(Unknown 

Source)
    at com.sun.deploy.cache.ResourceProviderImpl.getResource(Unknown Source)
    at com.sun.deploy.cache.ResourceProviderImpl.getResource(Unknown Source)
    at com.sun.javaws.LaunchDownload$DownloadTask.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker

(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run

(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.EOFException: SSL peer shut down incorrectly
    at sun.security.ssl.InputRecord.read(InputRecord.java:482)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:927)
    ... 19 more

Java Security Warning

Exception

附加信息:我检查了端口,它们指向正确的端口号,并且 TLS 值也匹配。证书也在 cacerts 下添加。

问题:安全提示响应超过3-5秒时出现异常是什么原因?以及如何避免上述异常(可能会增加等待时间)?

已完成的操作: 1.在Tomcat连接器中添加connectionTimeout属性,但是在等待5秒响应Java安全警告后,应用仍然无法启动。

【问题讨论】:

请您也发布 SSL 配置 【参考方案1】:

这很容易由 https.protocols 系统属性控制。这就是您能够控制工厂方法返回的内容的方式。例如设置为“TLSv1”。

当您想使用两种协议而不是一种协议时会导致问题。例如,SSLv3 和 TLSv1。如果您尝试连接 SSLv3 或 TLSv1,此 -Dhttps.protocols=TLSv1,SSLv3 将导致异常。

请检查此答案。 How to make Java 6, which fails SSL connection with "SSL peer shut down incorrectly", succeed like Java 7?

【讨论】:

【参考方案2】:

我遇到了同样的问题,然后我从 JRE1.7 切换到 JRE1.8 当然是因为 TLS1.2 More references

【讨论】:

以上是关于javax.net.ssl.SSLHandshakeException:握手期间远程主机关闭连接的主要内容,如果未能解决你的问题,请参考以下文章