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,再試一下,發現問題搞定了,不再報錯!
匯入證書參考這裡。