一、概要
1. 问题的由来
该问题是由于Java访问的域名是https且使用了自签名证书,Java客户端无法验证证书的合法性,进而报出异常。
该问题有以下解决思路:
a. 在Java客户端忽略证书的校验,这种方式适用于自己掌握Code的情况,且客户端服务端处于互相信任的环境中;
b. 将服务端的自签名证书添加到客户端的信任列表中,本文选择该种方案。
二、配置
1. 获取服务证书
openssl s_client -showcerts -connect www.example.com:443 </dev/null 2>/dev/null | openssl x509 -outform PEM >www.example.com.pem
2. 备份Java的cacerts
该步骤并非必须的,但是该步骤可以防止Java升级导致的keystore丢失。
(1) 创建备份目录
sudo mkdir -p /var/opt/java
(2) 备份
sudo cp /usr/lib/jvm/java-11-openjdk-11.0.19.0.7-4.el9.x86_64/lib/security/cacerts /var/opt/java
3. 导入证书
keytool -import -alias $ALIAS -keystore /var/opt/java/cacerts -file www.example.com.pem
alias: 当前导入证书的别名,比如这里可以取example;
keystore: 是JAVA的cacerts路径,这里我们使用备份的cacerts路径;
file: 是需要导入的证书路径。
4. 修改启动参数
在java启动时,添加以下参数:
-Djavax.net.ssl.trustStore=/var/opt/java/cacerts #Keystore的路径 -Djavax.net.ssl.trustStorePassword=changeit #Keystore的密码
三、参考
https://magicmonster.com/kb/prg/java/ssl/pkix_path_building_failed/
标签:opt,java,证书,cacerts,签名,Java,com From: https://www.cnblogs.com/eagle6688/p/17539402.html