Java自签名证书的信任处理

一、概要

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://docs.cloudbees.com/docs/cloudbees-ci-kb/latest/client-and-managed-controllers/pkix-path-building-failed-error-message

https://stackoverflow.com/questions/24563694/jenkins-unable-to-find-valid-certification-path-to-requested-target-error-whil

https://magicmonster.com/kb/prg/java/ssl/pkix_path_building_failed/

posted @ 2023-07-09 22:09  白马黑衣  阅读(733)  评论(0编辑  收藏  举报