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:握手期间远程主机关闭连接的主要内容,如果未能解决你的问题,请参考以下文章