javax.net.ssl.SSLHandshakeException: Remote host closed connection during han
北京某银行信用卡网申开发团队发来协助请求,内容是这样的:
内网中应用服务器要实现某一功能,需要从外网银联端获取一段数据,而内网应用服务器与外网银联服务器的网络是不通的,需要在内网前端配置一台代理服务器,将内网应用与外网银联接通网络,另外银联服务端提供的https协议的接口。
如图所示:
代理服务器预装的IBM Http Server, 他们之前配置了代理,而且还在代理server加了证书,这些都是多余的,代理server只提供了放开网络的功能,不需要证书,于是全给删了,只需要配置正向代理即可:
代码语言:javascript复制LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
Listen 7701
NameVirtualHost *:7701
<VirtualHost *:7701>
ProxyRequests On
ProxyVia On
<Proxy *>
Order deny,allow
Deny from all
allow from 192.168.126.100
allow from 192.168.126.101
</Proxy>
</VirtualHost>
配置完,重启服务,在应用server验证,
代码语言:javascript复制curl -x 192.168.10.10 http://www.baidu.com
可以获取百度首页数据。证明正向代理正常。
关键问题来了!
应用在向银联发请求是总是报错
javax.net.ssl.SSLHandshakeException: Remote host closed connection during han
下面是解决方案,没有图全是字
看报错首先就能想到SSL加密的问题,问题就出在应用的代码中了,给出分析并建议:
- 因为对端开放的是https加密接口,应用发出的请求也需要是https请求
- 使用浏览器验证网银https域名,可以打开页面,但是!浏览器提示不安全证书,应该是一个自签证书,浏览器可以点击“添加例外”或“继续浏览”来打开页面,但应用发出的请求无法模拟浏览器的步骤,所以在代码中需要修改“忽略证书安全验证”或“绕过证书验证”。
- 获取对端SSL加密方式,应用代码中需要配置相同的加密方式。 给出三个方面的建议,最终,在SSL加密方式上作了修改,问题得到解决。
下图是修改SSL加密过重中拍的图,希望可以给开发的同事得到一点帮助。