ValidatorException 异常处理 -PKIX path building failed

本贴最后更新于 1620 天前,其中的信息可能已经天翻地覆

Maven 下载依赖抛出一个 ssl 数字证书的异常:PKIX path building failed: SunCertPathBuilderException: unable to find valid certification path to requested target,记录一下这个问题的前因后果即解决办法

问题原因

在我这篇博客中:Maven 依赖下载失败的原因及解决方案 ,我将 maven 的仓库地址设置为 'http://maven.aliyun.com/nexus/content/groups/public' ,别看写着是 http 开头,实际访问,却是一个由 GlobalSign Organization Validation CA 颁发证书的 https 站点,而这个 ca 机构颁发的证书,在 jre/lib/security 的可信证书容器 cacerts 中是没有存放过的,所以报出 ssl 数字证书不可信的异常。

不信,可以使用这条命令:

keytool -list -keystore $JAVA_HOME/jre/lib/security/cacerts

默认密码为: 'changeit'

查阅一遍可信 ca 名单 ,你看看有没有 GlobalSign

解决办法

解决办法也很简单,直接将被质疑的证书导入 cacerts 即可,这一点很多其他博客也说明过,但他们只关注了 keytool 的命令是如何来导入证书的,并没有跟读者说明该导入的证书如何去获取

获取被质疑的证书

  • 在 mvn 抛出 PKIX path building failed: SunCertPathBuilderException 的日志中,我们也能看到具体是哪一个镜像仓库地址的证书是不可信的,那么用 chrome 浏览器访问这个站点

  • 点击左上角的锁 icon -> 证书 -> 详细信息 -> 复制到文件 -> 选择 Base64 编码的 X.509 格式,保存证书到本地目录

  • 获取证书结束,这里假设你的证书存放路径为 /tmp/caCert.cer

导入证书到 cacerts

  • 执行以下命令
keytool -import -file /tmp/caCert.cer -keystore $JAVA_HOME/jre/lib/security/cacerts
  • 输入 cacerts 密码: changeit

  • 导入成功,结束

  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    185 引用 • 318 回帖 • 352 关注
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    69 引用 • 190 回帖 • 501 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...