1. 程式人生 > >HttpClient請求出現PKIX path building failed錯誤

HttpClient請求出現PKIX path building failed錯誤

問題描述:

javaWeb專案在本地正常執行,拿到同事電腦上也正常執行。但是打包放到伺服器發現失敗,報的錯誤大致如下:

PKIX path building failed:sun.security.provider.certpath.SunCertPathBuilderException:ubable to find valid certification path to requested target ...

跟蹤了下程式碼,發現拋這個異常的地方是程式碼中一處通過httpClient進行網路請求的地方,請求的URL是https型別的。但是比較怪的是在本機以及同事的電腦上都能正常,為何到伺服器上不行了?

最初懷疑是不是伺服器上的網路限制了Tomcat應用發起網路請求,但是經過核查,發現並沒有。後來發現本地的jdk以及同事的jdk版本都是1.7,但是伺服器上的jdk版本是1.8。後來又看到有人說應該是jdk對證書不信任,所以失敗。

解決方法

有兩種解決方法

一、一種是程式碼一勞永逸,參考這裡,我沒有去驗證這個,不評價行不行,路過的大大可以試一試。

二、下載程式碼中要請求的url對應的證書,然後倒入到jdk信任中。

操作步驟:

我要訪問的url字首是:https://oapi.dingtalk.com/

1.在谷歌中輸入該地址,然後點選輸入欄左側的小鎖,會有證選項,點選證書,彈出的頁面中,選擇詳細資訊,如下:

2.然後點選,複製到檔案,是一個到處證書的過程。

3.這一步直接選擇預設即可。然後下一步是儲存到本地。

這裡,我們假設儲存後的證書檔案未 taobao.cer。

4.拷貝證書檔案到 %JAVA_HOME%/jre/bin/路徑下

5.開啟命令列,切換到%JAVA_HOME%/jre/bin/目錄下,執行如下命令:

keytool -import -v -trustcacerts -alias taobao -file taobao.cer -storepass changeit -keystore %JAVA_HOME%/jre/lib/security/cacerts

執行過程中,會提示“是否信任證書?[否]”,輸入“y”即可。

匯入成功後。

重新執行tomcat,再試一下,發現問題搞定了,不再報錯!

匯入證書參考這裡。