问题描述
通过 Https URL 发送 SOAP 请求时出现“javax.net.ssl.SSLHandshakeException:握手期间远程主机关闭连接”错误
环境:
1) Weblogic 10.3.6.0.1
2) java 版本 "1.6.0_31" Java(TM) SE Runtime Environnent (build 1.6.0_31-b04)
3) Https Server 发布请求的地方是 Jetty Server
概述:
1)在应用程序的先前版本中,它通过 https URL 向服务器 1 发送 SOAP 消息
2)在当前版本中,我们实现了新要求,其中我们使用内部调用第三方 https 服务器
的第三方客户端 jar 3)第三方客户端 jar 正在设置建立 SSL 证书并发布请求。对于 SSL,他们使用 443 端口,我们为他们的主机服务器打开了代理。
4) 现在我们有 2 个第三方服务器,我们通过 Https 连接。服务器 1 https 端口为 30042,服务器 2 https 端口为 443。
错误的用例场景:
1)通过https向服务器1提交请求,正确获取响应。
2)通过代理服务器使用第三方客户端jar向Server2提交请求,正确获取响应。
3) 通过 https 向服务器 1 提交请求,失败并出现错误“javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake”。
4)使用第三方客户端jar向Server2提交请求,正确获取响应。
5)在服务器 1 上它总是会失败,我们无法通过 Https 发送 SOAP 消息
6)对于服务器 1 应用程序正在使用 SOAPConnection 和 URL API 通过 Https URL 发布SOAP 消息
7)对于服务器 2 应用程序正在使用第三方提供的 jar它在内部打开插座并在上面写字
错误代码
-------------------------------------------------- -
javax.net.ssl.SSLHandshakeException:握手期间远程主机关闭连接
此环境的最新变化
目前,我们将应用程序从 Solaris 迁移到 Suse Luunix 服务器。
处理器规格
Linux onsrnasdfgpsdev1 2.6.32.54-0.3-default #1 SMP 2012-01-27 17:38:56 +0100 x86_64 x86_64 x86_64 GNU/Linux
Weblogic 10.3.6.01 java 版本“1.6.0_31”Java(TM) SE 运行时环境(构建1.6.0_31-b04) Java HotSpot(TM) 64 位服务器 VM(内部版本 20.6-b01,混合模式)
解决方法
• 对于服务器1 连接,如果我们创建一个原始套接字并设置主机和端口(30042)。
• 请求进展顺利。
• 但是,如果我们使用 SOAPConnection 或 HttpsURLConnection,则请求不会进行并引发握手错误
• 如果我们对 Server1 使用 Http Url,一切正常