Ubuntu+OpenJDK11环境Jenkins CLI报SSLHandshakeException证书错误如何解决
问题根因
这个报错本质是OpenJDK的信任证书库中没有你访问的Jenkins站点对应的SSL根证书,无法完成证书链校验。重装ca-certificates-java仅会更新公共可信CA的证书,如果目标站点使用自签证书、企业私有CA签发的证书,就不会被默认信任库收录,因此重装命令无法解决问题。
排查步骤
- 首先校验目标站点的证书链状态,执行以下命令拉取站点证书信息:
检查返回结果中的证书链,确认是否为自签证书、私有CA签发证书,或者存在证书链不完整的问题。openssl s_client -connect [website_name]:443 -showcerts < /dev/null - 校验OpenJDK 11的信任库中是否已存在对应证书:
Ubuntu系统默认安装的OpenJDK 11信任库路径为/etc/ssl/certs/java/cacerts,默认访问密码为changeit,执行以下命令检索:keytool -list -keystore /etc/ssl/certs/java/cacerts -storepass changeit | grep -i [站点证书主体/颁发机构关键词] - 排查WSL特有问题:WSL可能存在系统时间与宿主机不同步的情况,会导致证书有效期校验失败,执行以下命令同步时间后重试:
sudo hwclock -s
解决方案
方案1:全局导入证书(推荐)
- 从openssl命令返回的结果中,提取目标站点的根证书内容(
-----BEGIN CERTIFICATE-----到-----END CERTIFICATE-----之间的内容),保存为jenkins-root.crt文件。 - 执行以下命令将证书导入OpenJDK全局信任库:
sudo keytool -import -alias jenkins-custom-ca -file jenkins-root.crt -keystore /etc/ssl/certs/java/cacerts -storepass changeit - 出现信任确认提示时输入
yes,完成导入后重试Jenkins命令即可。
方案2:命令行指定自定义信任库
如果不想修改全局信任库,可以单独为本次命令指定信任库参数:
java -Djavax.net.ssl.trustStore=/path/to/your/custom/cacerts -Djavax.net.ssl.trustStorePassword=changeit -jar jenkins-cli.jar -s https://[website_name] get-job job_xxx > myjob.xml
方案3:临时跳过证书校验(仅排查用,不建议生产环境使用)
可以通过参数直接关闭证书校验,快速验证是否为证书问题导致的报错:
java -jar jenkins-cli.jar -noCertificateCheck -s https://[website_name] get-job job_xxx > myjob.xml
内容的提问来源于stack exchange,提问作者JMBA
相关产品推荐
相关产品推荐

