1. 程式人生 > >javax.net.ssl.SSLHandshakeException: Remote host closed connection during han 報錯解決

javax.net.ssl.SSLHandshakeException: Remote host closed connection during han 報錯解決

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

北京某銀行信用卡網申開發團隊發來協助請求,內容是這樣的:

內網中應用伺服器要實現某一功能,需要從外網銀聯端獲取一段資料,而內網應用伺服器與外網銀聯伺服器的網路是不通的,需要在內網前端配置一臺代理伺服器,將內網應用與外網銀聯接通網路,另外銀聯服務端提供的https協議的介面。

如圖所示:
這裡寫圖片描述

代理伺服器預裝的IBM Http Server, 他們之前配置了代理,而且還在代理server加了證書,這些都是多餘的,代理server只提供了放開網路的功能,不需要證書,於是全給刪了,只需要配置正向代理即可:

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驗證,

curl -x 192.168.10.10 http://www.baidu.com 

可以獲取百度首頁資料。證明正向代理正常。

關鍵問題來了!

應用在向銀聯發請求是總是報錯

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

下面是解決方案,沒有圖全是字

看報錯首先就能想到SSL加密的問題,問題就出在應用的程式碼中了,給出分析並建議:
1. 因為對端開放的是https加密介面,應用發出的請求也需要是https請求
2. 使用瀏覽器驗證網銀https域名,可以開啟頁面,但是!瀏覽器提示不安全證書,應該是一個自簽證書,瀏覽器可以點選“新增例外”或“繼續瀏覽”來開啟頁面,但應用發出的請求無法模擬瀏覽器的步驟,所以在程式碼中需要修改“忽略證書安全驗證”或“繞過證書驗證”。
3. 獲取對端SSL加密方式,應用程式碼中需要配置相同的加密方式。
給出三個方面的建議,最終,在SSL加密方式上作了修改,問題得到解決。

下圖是修改SSL加密過重中拍的圖,希望可以給開發的同事得到一點幫助。
這裡寫圖片描述