Jenkins 导入 Git 存储库时出现“无法找到所请求目标的有效证书路径”错误

2022-08-31 15:47:40

我正在尝试使用笔记本电脑上的Jenkins Git插件从Jenkins构建Git存储库。Git 存储库驻留在具有自签名证书的公司受信任服务器上。在指定URL时,我总是收到一个错误:

Failed to connect to repository : sun.security.validator.ValidatorException:
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException:
unable to find valid certification path to requested target

我了解由于自签名证书而出现此错误,但服务器属于我的公司并由颁发机构签名。

我还尝试使用自签名从另一台笔记本电脑导入相同的存储库,并不断收到相同的错误。

任何帮助将不胜感激


答案 1

该错误是 Java 虚拟机报告的常见错误消息。当 Java 环境没有关于 HTTPS 服务器的信息来验证它是否是一个有效的网站时,会导致这种情况。有时,证书由内部根 CA 提供,或者是自签名证书。这有时会混淆JVM,因为它不是Java“受信任”列表中可以提供这些证书的人之一。

因为我们知道证书是“有效的”,所以我们可以将此证书直接导入到 JVM 中。在这样做的过程中,我们告诉JVM这是一个“可信”的证书,并“忽略”它的任何问题。

您需要将证书添加到 Java 证书颁发机构文件中。对于 Debian/Ubuntu Linux 机器,它通常位于以下位置:

$JAVA_HOME/jre/lib/security/cacerts

但是,您不希望将其添加到 JRE cacert 密钥库,因为它将被 JRE 覆盖/重写,因此最好为 Jenkins 复制此文件。

  • $JAVA_HOME- 这应该是你当前java主页的位置。如果只安装了 Java 运行时环境 (JRE),则可以用 .$JAVA_HOME/jre$JRE_HOME

  • $ALIAS- 这可以是任何值。将此证书与其他证书区分开来是一个值。示例是“git-repo”或“工件服务器”。

  • $JENKINS_HOME- 这是通往詹金斯家的路。经常。/var/lib/jenkins

您可以使用以下命令将证书导入到 JVM cacerts 文件中。-- 在你的詹金斯大师。获取证书,复制 Jenkins 的 JVM 密钥库,将证书导入密钥库,将可信密钥库添加到 Jenkins 启动参数,然后重新启动 Jenkins。

# Import certificate
openssl s_client -showcerts -connect https://your-target-server\
< /dev/null 2> /dev/null | openssl x509 -outform PEM > ~/root_ca.pem

# Duplicate Java Keystore file and move into Jenkins...
mkdir $JENKINS_HOME/keystore/
cp $JAVA_HOME/jre/lib/security/cacerts $JENKINS_HOME/keystore/

# Add Certificate to Keystore
keytool -import -alias $ALIAS -keystore $JENKINS_HOME/keystore/cacerts -file ~/root_ca.pem

# Add -Djavax.net.ssl.trustStore=$JENKINS_HOME/keystore/cacerts to the
# Jenkins startup parameters. For Debian/Ubuntu, this is /etc/default/jenkins
echo 'JAVA_ARGS="$JAVA_ARGS -Djavax.net.ssl.trustStore=$JENKINS_HOME/keystore/cacerts"'\
>> /etc/default/jenkins

sudo service jenkins restart

参考帮助:


答案 2

转到 ->管理 Jenkins -> 配置全局安全性 ->插件管理器,然后选中“使用浏览器下载元数据”框。

它将解决问题。