OpenJDK11遇到报错: PKIX path building failed XXXXX

前景回顾

因为公司项目需要,需要对接亚马逊iot,向亚马逊iot发送消息,使用的是亚马逊的sdk,一切看似正常,然而测试服报错,本地环境正常。

本地JDK配置:

java version "11.0.11" 2021-04-20 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.11+9-LTS-194)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.11+9-LTS-194, mixed mode)

测试服JDK配置:

openjdk version "11.0.12" 2021-07-20 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.12+7-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.12+7-LTS, mixed mode, sharing)

有很大差别么,并没有太大差别,本地使用的是oracle JDK11 ,服务器因为懂得都懂的原因,使用的是openJDK11,仅此而已,但是程序始终会报错:

PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

解决问题

先改了一个配置

找到一个链接,是oracle官网的一个链接,oracle证书的说明,大致意思是Oracle的JDK将不再信任赛门铁克发布的TLS证书,这与谷歌、Mozilla、苹果和微软最近宣布的类似计划一致。如有必要,您可以通过在java.security配置文件的jdk.security.caDistrustPolicies安全属性中注释掉或删除“SYMANTEC_TLS”来绕过这些限制。

https://blogs.oracle.com/java/post/oracles-plan-for-distrusting-symantec-tls-certificates-in-the-jdk

上述的这个配置,在JAVA_HOME/conf/security/java.security这个文件,以文本方式打开,大概在1187行附近,有这么一句jdk.security.caDistrustPolicies=SYMANTEC_TLS需要注释掉,改成如下:

#jdk.security.caDistrustPolicies=SYMANTEC_TLS

然后,然后服务器上还是不行,淦!

中间又做了很多尝试,就不详叙述了,最后突发奇,做了一步神奇操作搞定!

然后替换了个文件

在JAVA_HOME/lib/security/cacerts文件,这个文件主要是JDK用来储存证书的一个仓库,包括自身信任的证书和keytool导入的一些证书,然后我用orecle的cacerts证书替换掉了服务器上openJDK的同一路径下的同名文件,OK,搞定!

问题估计

通过keytool -list -keystore cacerts命令查看两个文件,发现orecleJDK的日期都是毫无规律的,而且日期都比较久了,而openJDK的日期都是2021年的,不知道会不会和这个问题有关系,目前遇到了,先记一下,备忘。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值