每次編譯器更新java sdk版本後,例如這次我從openjdk11.0.5升級到11.0.8
就會出現:javax.net.ssl.SSLHandshakeException: PKIX path building failed
編譯或執行時出錯
找到解法如下:
1.先下載該網站公開憑證
例如我想連到 google.com 透過 HTTPS執行程式或下載
使用openssl先產生該網站的crt憑證檔案
openssl s_client -connect google.com:443 -servername google.com:443 < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > public.crt
2.再匯到jvm的cacert 中,這邊一定要找到jdk版本中keytool的絕對路徑
例如:/Library/Java/JavaVirtualMachines/adoptopenjdk-11-openj9.jdk/Contents/Home/bin/keytool
<JAVA_HOME>/bin/keytool -import -alias <server_name> -keystore <JAVA_HOME>/jre/lib/security/cacerts -file public.crt
這樣就可以解決了
參考文件
https://confluence.atlassian.com/kb/how-to-import-a-public-ssl-certificate-into-a-jvm-867025849.html