解決httpclient訪問自簽名https報javax.net.ssl.SSLHandshakeException: sun.security.validat

 如果你構建了一個https協議的站點,而此站點的安全證書並不是合法的第三方證書頒發機構所簽發,那麼你用httpclient去訪問此站點會報如下錯誤

 

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

 

產生原因是jdk的證書庫裏並沒有將該站點的證書作爲受信任的安全證書。

 

解決方法是導該站點的證書,將此證書導入到java的信任證書庫中。

 

要注意的是,在win7或更高的系統中,運行一定要以管理員身份運行CMD,Mac os 要用sudo -i 命令切換爲 root用戶,否則會報以下錯

keytool錯誤: java.io.FileNotFoundException: 

 

把證書導入java的cacerts證書庫的步驟:

第一步:IE打開網站,把要導入java證書庫的證書下載
        在該網頁安全警報彈出窗口上查看證書--詳細信息--複製到文件
        會彈出一個證書導出嚮導對話框,按提示一直下一步直到完成。
        我把證書保存在C盤,名字爲NEXT_CertKey.cer 或是 xxxx.der。

第二步:將上面導出的證書導入java中的cacerts證書庫
        windows  cmd進入C:\Program Files\Java\jdk1.5.0_06\jre\lib\security目錄

         mac os 終端進入 /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/security


        敲入如下命令回車執行
        keytool -import -alias cacerts -keystore cacerts -file C:\NEXT_CertKey.cer -trustcacerts

 

如果出現這個錯誤:'keytool' 不是內部或外部命令 參考:https://blog.csdn.net/chinassj/article/details/85603736

 


        此時命令行會提示你輸入cacerts證書庫密碼,
        java中cacerts證書庫默認密碼爲changeit,
        Y確認即可,OK,認證已添加至keystore。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章