Maven:sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider...

 仍是記錄使用 maven 時遇到的問題。html

1、maven報錯

  maven package 進行打包時出現瞭如下報錯:
  Non-resolvable parent POM for com.wpbxin:springboot2-first-example:0.0.1-SNAPSHOT: Could not transfer artifact org.springframework.boot:spring-boot-starter-parent:pom:2.1.5.RELEASE from/to alimaven (https://maven.aliyun.com/nexus/content/groups/public): sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target and 'parent.relativePath' points at wrong local POM @ line 10, column 13 -> [Help 2]
  截圖以下:java

  再來一個同樣可是比較奇葩的截圖,這一次基本是處理完本次出現的問題後,筆者想回過頭來重現問題而後記錄下來(先後間隔3天左右),但卻發現,同個打包的 maven 命令,前面還打包不成功,隔了十幾秒再次運行命令,卻又打包成功了(還有真多是渣渣的網絡緣由!畢竟我這裏用了手機的熱點),一次 package 成功了而後後面的打包又基本沒問題了,呃。。。spring

 

2、一些說明

  這個是學習 SpringBoot2 時建立 HelloWorld 工程遇到的問題。先說下相關環境和系統設置:
  win10 + JDK 1.8.0_111 + Apache Maven 3.3.9 + idea2019.1( + 手機共享熱點,不排除可能網絡問題下載慢)( + 谷歌瀏覽器77版本的)
  筆者回過頭記錄這篇文章的時候試了下,默認狀況下的maven中央倉庫地址:https://repo.maven.apache.org/maven2(好像比用阿里雲的鏡像庫時順利點,速度也感受還行吧。)。這裏貼上本地 maven 的 mirror 設置,這裏設置的是國內的阿里雲鏡像,詳情能夠參考阿里雲公共代理庫官網相關說明:https://help.aliyun.com/document_detail/102512.html?spm=a2c40.aliyun_maven_repo.0.0.36183054oSYFKSapache

<mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <mirrorOf>central</mirrorOf>
    <!-- 阿里雲公共代理庫使用指南:https://help.aliyun.com/document_detail/102512.html?spm=a2c40.aliyun_maven_repo.0.0.36183054oSYFKS -->
    <!-- <url>https://maven.aliyun.com/nexus/content/groups/public</url> -->
    <url>https://maven.aliyun.com/repository/public</url>
</mirror>

  

3、出現問題的緣由和幾種解決方法

  看了下報錯提示,而後在網上搜了下,大體能夠看出是 HTTPS 的證書安全檢查問題。想一想也是,如今 HTTPS 在大力推廣,而 HTTPS 確實是須要雙向驗證的。既然遇到了,那總得處理完而後記錄下吧,省得再被坑。如下就是筆者關於處理這個問題過程當中的一些參考和驗證。如下是4種處理方式:瀏覽器

一、忽略SSL證書檢查

  直接忽略掉SSL證書檢查,跳過這個驗證,在 maven 打包命令中加上參數 「-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true」 。
  idea中的設置: settings ==> Build,Execution,Deployment ==> Build Tools ==> Maven ==> Runner 中的 VM Options ,將參數填入,截圖以下:安全

  Eclipse中的設置:右鍵項目 ==> Run As ==> Run Configurations... ,在 Maven Build 那一塊中的 JRE 欄位中的 VM arguments ,將參數填入,注意這裏不一樣的參數須要換行,截圖以下:springboot

參考連接:使用Maven時出現「jssecacerts PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilde」錯https://blog.csdn.net/carrie__yang/article/details/79612385網絡

 

二、生成證書並導入到 JRE security 中

  既然用的是阿里雲的鏡像,那就去官網下個證書瞧一瞧。
  第一步,谷歌瀏覽器打開網站:https://maven.aliyun.com/mvn/view,左上角中那把小鎖,也即截圖的紅框,maven

  點擊「證書(有效)」,舊版的瀏覽器能夠有 View certificate 之類的,反正記住是看證書就行。ide

  彈出來一個框框,點擊「詳細信息」

  選擇「複製到文件(C)...」,而後下一步

  選擇格式:

  生成的名稱,好比我這裏aliyun-maven.cer,路徑是 C:\cs-softwares\aliyun-maven.cer ,而後導出來:

  完成證書導出

 

  接下來,使用 keytool 命令導入證書,進入到 JDK 下 jre 下 lib 下的 security 目錄,好比個人是 C:\cs-softwares\Java\jdk1.8.0_111\jre\lib\security,而後運行命令 keytool -import -alias aliyun-maven -keystore cacerts -file C:\cs-softwares\aliyun-maven.cer ,以下,證書指紋(證書密鑰):changeit
-alias :表示指定證書別名
-file :指定證書文件

  輸入 Y 表示確認:

  查看證書,證書密鑰一樣是 changeit :
keytool -list -keystore cacerts -alias aliyun-maven
  刪除證書,證書密鑰一樣是 changeit:
keytool -delete -alias aliyun-maven -keystore cacerts

  確認安裝了證書以後,記得關閉這個cmd窗口,而後重啓下idea或者Eclipse,再次進行 maven packge ,到這裏應該是OK了。若是仍是不行,報出了錯誤: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty ,如截圖:

  來來來,再加上參數(記得路徑能夠改成本身的 JDK 安裝路徑),把剛纔的證書用上,參考:The trustAnchors Parameter Must Be Non Emptyhttps://www.techpaste.com/2017/03/trustanchors-parameter-must-non-empty/ ,這下應該妥妥了。(後面OK了以後,也試過刪除了阿里雲鏡像的證書,而後再打包,同樣沒問題,這裏能夠先試下直接加參數,有問題再加證書
-Djavax.net.ssl.trustStore=C:\cs-softwares\Java\jdk1.8.0_111\jre\lib\security\cacerts
-Djavax.net.ssl.trustAnchors=C:\cs-softwares\Java\jdk1.8.0_111\jre\lib\security\cacerts

三、使用默認的 maven 中央倉庫

  前面提到過默認的 maven 中央倉庫: https://repo.maven.apache.org/maven2,使用默認的配置就好了(本地倉庫自行設置)。

PS:吐槽下,絕望以後回到了最初的起點,使用默認的配置竟然沒啥問題(即便用了 maven 默認的中央倉庫,原本是要來重現問題的),而後回過頭來想用阿里雲 maven 鏡像重現問題,就把阿里雲中央倉庫的證書也刪除了,並且使用了阿里雲的鏡像庫,也不加任何參數,此次卻順利用上了,而後把 spring-boot-starter-parent 從 2.1.0.RELEASE 到 2.1.9.RELEASE 都試了個遍,哎呦去咋狀況,又都沒問題了,或者是有問題的,試了第二遍或者第三遍又行了,這還真有多是個人渣渣網絡緣由。。。

四、使用 http 的鏡像庫

  這就是直接避開了吧,這個方法就沒試過了,只是查找問題的過程當中看 stackoverflow 上有提到。

 

4、參考連接

一、使用Maven時出現「jssecacerts PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilde」錯https://blog.csdn.net/carrie__yang/article/details/79612385

二、完全解決unable to find valid certification path to requested targethttps://blog.csdn.net/gabriel576282253/article/details/81531746

三、關於gradle Cause: unable to find valid certification path to requested target錯誤解決方法https://www.chengbinbin.cn/archives/1550795296099/

四、Maven編譯打包時報「PKIX path building failed」異常解決方法https://www.iteye.com/blog/truth99-2160540

五、Problems using Maven and SSL behind proxyhttps://stackoverflow.com/questions/25911623/problems-using-maven-and-ssl-behind-proxy

六、Could not transfer artifact from/to central because of InvalidAlgorithmParameterException: the trustAnchors parameter must be non-emptyhttps://stackoverflow.com/questions/37278306/could-not-transfer-artifact-from-to-central-because-of-invalidalgorithmparameter

七、The trustAnchors Parameter Must Be Non Emptyhttps://www.techpaste.com/2017/03/trustanchors-parameter-must-non-empty/

八、Could not transfer artifact (https://repo.maven.apache.org/maven2): Received fatal alert: protocol_version -> [Help 1]https://stackoverflow.com/questions/50946420/could-not-transfer-artifact-https-repo-maven-apache-org-maven2-received-fat

相關文章
相關標籤/搜索