1. 程式人生 > >resin https 請求報錯解決

resin https 請求報錯解決

問題:

  	遊戲支付完後,通知服務端,服務端要去蘋果伺服器驗證訂單是否合法。採用的是封裝好的HttpClient 工具。

在與客戶端聯調時,驗證訂單這一步報錯

javax.net.ssl.SSLHandshakeException: Failed to negotiate the use of secure ...

排查

1.在main方法中模擬呼叫這個請求,返回結果正常,可以訪問成功 2.啟動web伺服器後,呼叫驗證的介面,到去蘋果伺服器驗證的時候又丟擲上面的異常 3.考慮是 httpClient 請求https時需要處理,百度一番,按照百度上的修改程式碼,測試結果還是跟第一二步一致

分析

1.為什麼main方法中執行成功,啟動web伺服器,執行相同的邏輯的時候就報錯? 2.網上各種對httpclient的修改都嘗試了,結果都是一樣 3.考慮是否是web容器的原因(專案用的resin伺服器) 4.百度 resin https 配置,一堆亂七八糟的,搜不到想要的 5.直接去resin 配置檔案中搜索 “ssl” 關鍵字(該關鍵字在異常出出現過)

在 resin.xml 中搜出這兩項配置

	<system-property
    jdk.tls.ephemeralDHKeySize="2048"
    jdk.tls.rejectClientInitiatedRenegotiation="true"
    sun.security.ssl.allowUnsafeRenegotiation="false"
    sun.security.ssl.allowLegacyHelloMessages="false"/>

allowUnsafeRenegotiation 該關鍵字與異常資訊中的相似 allowLegacyHelloMessages 該關鍵字與debug時看到的資訊相似 把這兩項配置改成 true

啟動web專案,訪問介面, 執行正常

總結

	出現這樣一段程式碼執行出兩個結果的詭異情況時,先斷點看看邏輯是不是一致,再想想是不是環境差異上的問題