解决Maven使用中PKIX path building failed: unable to find valid certification path to requested target问题

问题描述

在Eclipse中创建Maven项目,或者使用Maven从特定的远程仓库下载jar包时 ,得到下面的错误信息:
Failure to transfer org.apache.maven.archetypes:maven-archetype-quickstart:pom:1.1 from … was cached in the local repository, resolution will not be reattempted until the update interval of … has elapsed or updates are forced. Original error: Could not transfer artifact org.apache.maven.archetypes:maven-archetype-quickstart:pom:1.1 from/to …: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

原因分析

用户配置文件settings.xml中设置了远程仓库,但是没有设置代理,导致连接远程仓库时,找不到对应的有效证书,认为是不可信站点,于是抛出这个错误信息。

解决方法

目的让JRE信任这个证书,把该远程仓库地址的证书导入到JRE的证书库中。

  1. 在浏览器上访问远程仓库地址,然后通过浏览器将证书导出。步骤如下:
  • 按图片所示操作(这里选取csdn网站举例,使用Chrome)
    在这里插入图片描述
  • 操作上图两小步后,出现证书窗体,后续操作描述如下:

    详细信息 -> 右小角:复制到文件 -> 选择 Base64编码 X.509 -> 按步骤操作即可

  1. 把导出的证书导入JRE证书库中。前提是确保对JRE路径下有写的权限
  • 使用keytool的命令行工具,查看帮助:
C:\Program Files\Java\jdk1.8.0_201\bin>keytool -help
密钥和证书管理工具

命令:

 -certreq            生成证书请求
 -changealias        更改条目的别名
 -delete             删除条目
 -exportcert         导出证书
 -genkeypair         生成密钥对
 -genseckey          生成密钥
 -gencert            根据证书请求生成证书
 -importcert         导入证书或证书链
 -importpass         导入口令
 -importkeystore     从其他密钥库导入一个或所有条目
 -keypasswd          更改条目的密钥口令
 -list               列出密钥库中的条目
 -printcert          打印证书内容
 -printcertreq       打印证书请求的内容
 -printcrl           打印 CRL 文件的内容
 -storepasswd        更改密钥库的存储口令
  • 打开cmd窗体,执行import操作命令,后面有输入密码操作,密码默认为:changeit

%JAVA_HOME%\bin\keytool -import -alias suncert -keystore %JAVA_HOME%\jre\lib\security\cacerts -file %导出证书路径%

注意:如果参数中有空格,可以用双引号括起来。
例如:

C:\Program Files\Java\jdk1.8.0_201\bin\keytool -import -alias suncert -keystore “C:\Program Files\Java\jdk1.8.0_201\jre\lib\security\cacerts” -file “C:\temp\csdn.cer”

  • 补充:

删除已经加上去的证书:指定了alias名字,和哪个证书库

%JAVA_HOME%\bin\keytool -delete -alias suncert -keystore %JAVA_HOME%\jre\lib\security\cacerts

查看有哪些证书:

%JAVA_HOME%\bin\keytool -list -keystore %JAVA_HOME%\jre\lib\security\cacerts

根据alais名字查看证书:

%JAVA_HOME%\bin\keytool -list -alias <alias name> -keystore %JAVA_HOME%\jre\lib\security\cacerts

上面的步骤做完后,可以重试Maven,看是否解决。

参考资料

https://www.grim.se/guide/jre-cert

发布了79 篇原创文章 · 获赞 10 · 访问量 8696

猜你喜欢

转载自blog.csdn.net/weixin_44728363/article/details/98246087