最近做ETC項目時候,在調用ETC接口出現了javax.net.ssl.SSLHandshakeException異常。
完整的異常信息:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
上面異常信息提示:請求目標沒有發現有效的證書路徑。訪問ETC接口使用的是HTTPS安全的網絡通信協議,導致該問題的原因是應用程序調用調用接口時候,會檢查本地JVM所在環境是否有對應的證書,如果沒有則報錯。
其實解決方法也挺簡單,就是把接口地址的證書下載下來,然後安裝到JVM所在環境中。具體步驟如下:
-
第一步: 在瀏覽器上輸入應用程序需要調用的接口地址,然後按下F12,然後在security欄目中點擊View certificate按鈕;
記住證書的名字:
-
第二步:在“運行”中輸入
certmgr.msc
,打開證書管理窗口後,找到我們需要下載的證書文件;
-
第三步:選中需要下載的證書文件,然後鼠標右鍵->所有任務->導出,把證書導出到本地磁盤上;
-
第四步:打開命令窗口,然後執行
keytool
命令,將證書安裝到本地環境中;
參數說明:
-import 導入證書操作
-alias 祕鑰對的別名
-keystore 祕鑰對的路徑及名稱
-file 證書文件的路徑
-trustcacerts 告訴keytool您要將其導入作爲受信任的證書
例如:
keytool -import -alias cacerts -keystore cacerts -file D:\JavaEE\JDK\jdk1.8.2\jre\lib\security\zsetc.crt -trustcacerts
輸入祕鑰庫的口令回車即可。
如果要查看已安裝的證書,可以執行以下命令:
keytool -list -v -alias cacerts -keystore cacerts -storepass 祕鑰庫的口令
刪除證書:
keytool -delete -alias cacerts -keystore cacerts -storepass 祕鑰庫的口令