Java https連接的”unable to find valid certification path to requested target”,”PKIX path building failed”錯誤
這個問題的是由於Java自帶的根證書庫中不包含HTTPS服務器上的根證書,因此無法得到認證。
比較容易實現的方案有兩種:
導入服務器證書到本地Java環境 代碼中忽略證書信任問題由於第二種方案會導致安全性問題,因此並不推薦。
將服務器的根證書導入到Java運行環境的根證書庫中,能解決對應的服務器https連接問題。
實現方式是使用$JAVA_HOME/jre/bin下的keytool工具將服務器端的證書添加到jre/lib/security/cacerts文件中。
需要注意的是:
可以使用浏覽器打開服務器網站頁面,然後導出證書文件,假設導出的證書文件為test.crt 。
利用keytool生成密鑰文件keystore:
keytool -importcert -noprompt -trustcacerts -alias test -file test.cer -keystore ~/mykeystore
這裡會要求設置口令,設置後請記住口令 。
將證書導入jre/lib/security/cacerts:
keytool -importkeystore -srckeystore ~/keystore -destkeystore [path_to_jre]/lib/security/cacerts
會要求輸入目標密鑰庫口令(也就是jre/lib/security/cacerts 的口令,默認是changeit或者changeme),以及源密鑰庫口令(之前設置的口令).
最後會顯示是否導入成功。如果成功則重啟Java程序。