2019年9月14日 星期六

存取https網址遇到SunCertPathBuilderException


存取https需要有憑證。若使用瀏覽器存取httpsweb site則憑證的問題由瀏覽器處理(將憑證匯入瀏覽器),但若使用Java code直接存取httpsweb siteweb service,就需要自己處理。
若沒有合法憑證去存取httpsURL,常見錯誤訊息為:sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
處理方式是必須將https的憑證(certificate)匯入到自己的JREtrust store內,該trust storeJRE內,如:
1.     C:\Java\jre1.8.0_45\lib\security\cacerts
2.     C:\Java\jdk1.8.0_45\jre\lib\security\cacerts
因為JDK內也有JRE,所以有選項2
一旦匯入完成後,只要由該JRE啟動的Java code都可以直接訪問該https網址。
匯入方式為:
1.     https://github.com/escline/InstallCert下載 InstallCert.java,並依照文章說明步驟進行。文章內容較謹慎,方式為產出trust store檔案後,將憑證由檔案匯出,再匯入自己的JRE內的trust store
2.     經驗上,直接把產出的trust store檔案置換JREtrust store檔案也可以:
甲、產出檔名若為「jssecacerts」,先改名為「cacerts」。
乙、置換JRE內的cacerts,記得先備份,有問題才能還原。


沒有留言:

張貼留言