通过Https URL发送SOAP请求时出现“javax.net.ssl.SSLHandshakeException:握手时远程主机关闭连接”错误
1)Weblogic 10.3.6.0.1
2)java版“1.6.0_31”Java(TM)SE运行时环境(版本1.6.0_31-b04)
3)发布请求的Https Server是Jetty Server
1)在先前版本的应用程序中,它通过https URL发送SOAP消息给服务器1
2)在当前版本中,我们实施了新要求,我们使用第三方客户端jar,内部调用第三方https服务器
3)第三方客户端jar正在设置SSL证书并发布请求。对于SSL,他们使用的是443端口,我们已经为他们的主机服务器打开了Proxy
4)现在我们有2个第三方服务器,我们通过Https连接。服务器1 https端口为30042,Server2 https端口为443.
1)通过https向服务器1提交请求,正确回复响应
2)通过代理服务器使用第三方客户端jar向Server2提交请求,正确回复响应
3)通过https向服务器1提交请求,失败并显示错误“javax.net.ssl.SSLHandshakeException:握手期间远程主机关闭连接”。
4)使用第三方客户端jar向Server2提交请求,正确回复响应
5)在服务器1上它总是会失败,我们无法通过Https发送SOAP消息
6)对于Server 1,应用程序使用SOAPConnection和URL API通过Https URL发布SOAP消息
7)对于Server 2应用程序正在使用第三方提供的jar,它在内部打开套接字并在其上书写
----------------------------------------------- ----
javax.net.ssl.SSLHandshakeException:握手期间远程主机关闭连接
目前我们已将我们的应用程序从Solaris迁移到Suse Lunix服务器。
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,混合模式)
•如果我们创建原始套接字并设置主机和端口(30042),则对于服务器1连接 •要求没问题 •但是如果我们使用SOAPConnection或HttpsURLConnection,则请求不会发生并且抛出握手错误 •如果我们使用Http Url for Server1,一切正常
答案 0 :(得分:0)
如果使用系统属性设置代理,那么所有后续的Https调用都会使用该代理,即使你没有在你的程序中设置,java也会在内部进行。
在我们的例子中,我们想要访问没有代理的服务器1,而对于服务器2,我们想要代理。 因此,当我们第一次尝试访问Server2时,我们使用系统属性设置Proxy,之后当我们尝试连接到服务器1时,它失败了因为https请求通过代理并且在我们的代理服务器上没有策略集对于服务器1
解决方案: 1)不要在系统级别设置代理,在连接级别添加 2)在服务器1的代理服务器中添加规则,因此服务器1和服务器1都是如此。 2通过代理 3)在运行时,在调用server1之前从系统属性中删除代理,然后再次设置它。因此,服务器2通过代理。
解决方案取决于条件;选择哪个适合你。
谢谢你 Bhanu Thapa