java - 导入 Git 存储库时 Jenkins "unable to find valid certification path to requested target"错误

标签 java ssl jenkins

我正在尝试构建一个 Git repo来自 Jenkins 使用 Jenkins Git Plugin在我的笔记本电脑上。 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

我知道这个错误是由于自签名证书引起的,但服务器属于我的公司并由权威机构签名。

我还尝试使用自签名从另一台笔记本电脑导入相同的存储库,但一直出现相同的错误。

任何帮助将不胜感激

最佳答案

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

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

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

$JAVA_HOME/jre/lib/security/cacerts

但是,您不想将它添加到 JRE cacert keystore ,因为它会被 JRE 覆盖/重写,因此最好为 Jenkins 复制此文件。

  • $JAVA_HOME - 这应该是您当前 java 主目录所在的位置。如果您只安装了 Java 运行时环境 (JRE),则可以将 $JAVA_HOME/jre 替换为 $JRE_HOME

  • $ALIAS - 这可以是任何值。这是区别于其他证书的值(value)。例如“git-repo”或“工件服务器”。

  • $JENKINS_HOME - 这是您 Jenkins 主页的路径。通常是 /var/lib/jenkins

您可以使用以下命令将证书导入 JVM cacerts 文件。 -- 在你的 Jenkins master 中。获取证书,复制Jenkins的JVM keystore,将证书导入keystore,将可信keystore添加到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

引用帮助:

关于java - 导入 Git 存储库时 Jenkins "unable to find valid certification path to requested target"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24563694/

相关文章:

java - RxJava 2 : How to filter items of infinite stream that emits "List<Item>"?

wcf - 如何配置 WCF REST 以使用 SSL?

java - Maven Surefire 无法在 Jenkins 上实例化我的 IReporter 类

python - Pywikibot 登录 SSLError 185090050

java - 我如何配置我的 Jenkins 工作以获得测试报告?

jenkins - 清理时文件不会从工作区中删除

java - Eclipse Java 应用程序 : Returning exit code\= 0 opens unwanted window

java - 防止 AWTEventMulticaster 放入堆栈

java - java repaint() 方法的帮助?

ssl - 在 Go 中使用电子邮件地址创建证书签名请求 (CSR)