最近在用 gradle 編譯安卓代碼,gradle 下載依賴庫報錯 “Exception in thread "main" javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty”,原因是高版本 java (1.8.0_4)下載 https 的時候去校驗證書了,默認java里沒有證書所以報錯。
一、臨時方案(在java中導入對應站點的公鑰)
1、copy出要下載的依賴庫地址,改pom后綴為xml並在chrome中訪問
由於改成xml后綴會報404,不過沒關系咱們只要這個域名的共鑰即可
2、點擊上圖三角,再點擊下圖紅框處
3、鼠標安卓證書拖動到桌面,導出此域名的證書
4、把證書上傳到linux服務器上,如下圖
5、執行如下命令,在java中導入此域名的證書
[root@VM-12-15-centos security]# pwd /cn/java-se-8u41-ri/jre/lib/security [root@VM-12-15-centos security]# keytool -alias repo.maven.apache.org -import -keystore cacerts -file /root/repo.maven.apache.org.cer
如果你沒有初始化 /cn/java-se-8u41-ri/jre/lib/security/cacerts,那輸入java默認密碼 changeit 即可
其中:
-alias repo.maven.apache.org :是別名,隨便起或者寫成導入的域名即可
-file /root/repo.maven.apache.org.cer :是證書文件地址,就是剛才傳上來的證書文件
6、查看已經安裝的證書
keytool -list -keystore cacerts
運行命令后可以看到安裝了兩個證書
7、重新編譯后即可成功下載依賴資源
目前的解決方法有點費勁,需要針對每一個域名安裝證書,大致的方法:
1、訪問對應的網站,從瀏覽器中導入對應域名的公鑰,將公鑰文件傳到linux
2、通過命令給java導入對應域名的公鑰 keytool -import -keystore cacerts -file /root/a1.cer
重新編譯ok了