如果你構建了一個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。