记一次证书引发的问题

前言

昨天又重拾 SpringCloud 配置中心的问题来研究,之前启动服务一直报错,关键信息

1
2
3
4
sun.security.validator.ValidatorException:
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException:
unable to find valid certification path to requested target

认真阅读了了一下,确认大概是认证问题,网上有看到相关的博客也遇到过这种问题,基本确定了是证书问题

分析

我的 SpringCloud 服务是要访问 github 来获取配置的,我网页访问走的是 windows 方式,而程序跑起来走的是 JAVA 的方式,证书认证是通过 jre 里面的证书来验证的,到这里,要解决这个问题我得把证书成功的安装到jre\lib\security下的 cacerts 的证书文件里面

网上关于如何安装证书的方式说的比较多,关于证书操作如下,使用keytools工具

1
2
3
4
5
6
7
8
-- 把证书文件 maven.datastory.cer 导入 Java 证书库 cacerts 中,别名为 maven.datastory,密码是 changeit
keytool -import -alias githubstory -keystore cacerts -file github.zoombar.cer -trustcacerts -storepass changeit

-- 在证书库中查看指定别名的证书信息,需要输入密码
keytool -list -keystore cacerts -alias githubstory

-- 删除证书库中指定别名的证书
keytool -delete -keystore cacerts -alias githubstory

但是问题来了证书从哪里下载我是一头雾水,翻到https://www.playpi.org/2018082501.html这篇文章,才知道如何下载证书到本地

下载证书

  1. 先点击小锁标志,然后点击证书

image.png

  1. 接着点击详细信息,复制到文件

image.png

  1. 下载完毕后使用上面的命令导入即可,注意要使用管理员启动 CMD

后续

那篇文章中有说到是因为 JDK 版本过低导致无法自动更新证书,即使我们安装了证书,过一段时间证书过期之后我们还是要重新安装一次,所以后面我准备直接将 jdk 升级到了最新版

安装 OpenJDK

我是在红帽社区下载的 msi 安装包,如何安装就不赘述了,都一样
下载地址:https://developers.redhat.com/products/openjdk/download

值得注意的是

安装完毕后似乎并没有立刻生效,我配置完毕项目的 SDK 之后,启动依旧是报错,我当时认为不是 JDK 的原因,就再次安装了证书到新的 JDK 中,发现也没有生效,第三次启动却发现已经好了
为了验证到底是证书起的作用还是 JDK 起的作用,我卸载了该证书,发现依旧 OK,新版的 JDK 的确可以解决这个问题,而且是永久的!

相关

作者

孙博文

发布于

2020-04-02

更新于

2021-07-18

许可协议

评论