tags: [jdk]
categories: [ 问题排查]
前言
昨天又重拾SpringCloud配置中心的问题来研究,之前启动服务一直报错,关键信息
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
工具
-- 把证书文件 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这篇文章,才知道如何下载证书到本地
下载证书
- 先点击小锁标志,然后点击证书
- 接着点击详细信息,复制到文件
- 下载完毕后使用上面的命令导入即可,注意要使用管理员启动CMD
后续
那篇文章中有说到是因为JDK版本过低导致无法自动更新证书,即使我们安装了证书,过一段时间证书过期之后我们还是要重新安装一次,所以后面我准备直接将jdk升级到了最新版
安装OpenJDK
我是在红帽社区下载的msi安装包,如何安装就不赘述了,都一样
下载地址:https://developers.redhat.com/products/openjdk/download
值得注意的是
安装完毕后似乎并没有立刻生效,我配置完毕项目的SDK之后,启动依旧是报错,我当时认为不是JDK的原因,就再次安装了证书到新的JDK中,发现也没有生效,第三次启动却发现已经好了
为了验证到底是证书起的作用还是JDK起的作用,我卸载了该证书,发现依旧OK,新版的JDK的确可以解决这个问题,而且是永久的!