我正在尝试使用笔记本电脑上的Git repo从Jenkins构建Jenkins Git Plugin。 Git repo驻留在具有自签名证书的公司可信服务器上。在指定网址时,我总是收到错误:
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
我理解由于自签名证书导致此错误,但服务器属于我的公司并且由权限签名。
我还尝试使用自签名从另一台笔记本电脑导入相同的repo并继续获得相同的错误。
任何帮助将不胜感激
答案 0 :(得分:27)
转到->管理Jenkins->配置全局安全性->插件管理器 并选中“使用浏览器进行元数据下载”框。
它将解决问题。
答案 1 :(得分:17)
该错误是Java虚拟机报告的常见错误消息。当Java环境没有关于HTTPS服务器的信息以验证它是否是有效网站时,会导致此问题。有时,证书由内部根CA提供,或者是自签名证书。这有时会让JVM感到困惑,因为它不是Java“可信”列表中可以提供这些证书的JVM之一。
因为我们知道certififcate是“有效的”,我们可以将此证书直接导入JVM。在这样做时,我们告诉JVM这是一个“可信”的证书,并“忽略”它的任何问题。
您需要将证书添加到Java证书颁发机构文件中。对于Debian / Ubuntu Linux机器,通常位于此处:
$JAVA_HOME/jre/lib/security/cacerts
但是,您不希望将其添加到JRE cacert密钥库,因为它将被JRE覆盖/重写,因此最好为Jenkins复制此文件。
$JAVA_HOME
- 这应该是当前java主目录所在的位置。如果您只安装了Java Runtime Environment(JRE),则可以将$JAVA_HOME/jre
替换为$JRE_HOME
。
$ALIAS
- 这可以是任何值。将此证书与其他证书区分开来是一种价值。例如“git-repo”或“artifact server”。
$JENKINS_HOME
- 这是您Jenkins家的路径。经常/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 :(得分:9)
从这个问题来看,我的理解是这个Jenkins安装在开发人员的盒子上。
如果安全性不是此框中的核心问题,您可以在Jenkins Web UI中转到管理Jenkins &gt; 管理插件&gt;标签可用并搜索"skip-certificate-check"插件。
安装时,应该修复问题。请谨慎使用此插件,因为从安全角度不建议使用此插件。
答案 3 :(得分:4)
答案 4 :(得分:3)
Java附带了受信任的根证书颁发机构的默认列表。如果找不到返回其中一个受信任证书颁发机构的路径,它将不信任该证书。
听起来您尝试连接的服务器使用由内部证书颁发机构签名的证书。这对于内部服务器来说是典型的。如果证书不是面向外部的,你不会想要支付证书。
您可以使用keytool命令将公司的根证书颁发机构添加到java。然后,您将能够与此根证书签署的任何证书建立ssl连接。
答案 5 :(得分:3)
正确的解决方案是不要像很多人建议的那样禁用证书检查,而是将网站证书添加到Java密钥库中。
我将在下面列出自己的指南,该指南适用于Linux。我怀疑与Windows绑定的keytool一样,在Windows中也可以使用相同的导入,但是在涉及任何openssl命令时,您只能靠自己。
下载链中所有必需的证书(这是我在SO上找到的命令,我找不到链接,但这不是我自己创建的):
openssl s_client -showcerts -verify 5 -connect updates.jenkins-ci.org:443 < /dev/null | awk '/BEGIN/,/END/{ if(/BEGIN/){a++}; out="cert"a".crt"; print >out}' && for cert in *.crt; do newname=$(openssl x509 -noout -subject -in $cert | sed -n 's/^.*CN=\(.*\)$/\1/; s/[ ,.*]/_/g; s/__/_/g; s/^_//g;p').pem; mv $cert $newname; done
您现在应该有2个文件:
Let's_Encrypt_Authority_X3.pem
pkg_jenkins_io.pem
串联2个文件:
cat "Let's_Encrypt_Authority_X3.pem" pkg_jenkins_io.pem > full_chain.pem
下一步非常有用,因为Java键盘工具很挑剔,并且openssl软件包将解决所有间距问题。我已经看到keytool导入失败,即使openssl声称它是有效的,也不要跳过此步骤:
openssl x509 -in full_chain.pem -out full_chain_sanitized.pem
现在是有趣的部分。我假设您的Jenkins实例正在运行以下某些参数:
-Djavax.net.ssl.keyStore=/applications/configuration/pki/keystore.jks
-Djavax.net.ssl.keyStorePassword=GOOD_PASSWORD
-Djavax.net.ssl.trustStore=/applications/configuration/pki/truststore.jks
-Djavax.net.ssl.trustStorePassword=GOOD_PASSWORD
还请注意,您可能未使用自定义密钥库。在这种情况下,您可以尝试将证书包括在默认的cacerts文件中。有关详细信息,请参阅下一部分。如果您正在使用任何信任库,则将配置密码,因此在出现提示时输入密码。
现在,我们可以导入Jenkins插件站点证书。确保使用您自己的keytool路径,因为它与我自己的不同。
/applications/java/latest/bin/keytool -trustcacerts -import -v -alias pkg_jenkins_io_full_chain -file correct.pem -keystore /applications/configuration/pki/keystore.jks
/applications/java/latest/bin/keytool -trustcacerts -import -v -alias pkg_jenkins_io_full_chain -file correct.pem -keystore /applications/configuration/pki/truststore.jks
重新启动您的Jenkins服务器,插件站点应该可以工作。如果没有(或者如果您没有使用自定义密钥库开始),则可以尝试将证书添加到Java cacerts文件中,但是通常不赞成这样做,因为它将在任何更新过程中被替换。更好的选择可能是创建备份,将证书包含在副本中,然后使用副本作为信任库运行Jenkins。
请记住,cacerts存储的默认密码是'changeit'
cp /apps/java/latest/jre/lib/security/cacerts /apps/java/latest/jre/lib/security/cacerts_copy
# Add the certificate to the keystore
/applications/java/latest/bin/keytool -trustcacerts -import -v -alias pkg_jenkins_io_full_chain -file correct.pem -keystore /apps/java/latest/jre/lib/security/cacerts_copy
# Add -Djavax.net.ssl.trustStore= property to the Jenkins startup parameters, depending on your own OS.
# Just make sure to append it as such:
-Djavax.net.ssl.trustStore=/apps/java/latest/jre/lib/security/cacerts_copy
https://stackoverflow.com/a/47316409/7569335的答案很好,但是不能解决我遇到的自定义密钥库文件问题。对其进行检查并获得良好的信息。
答案 6 :(得分:1)
这是Java版本-系统Java和Jenkins Java版本之间存在Jenkins认证问题。
更改Jenkins引用的Java路径。
转到您的Jenkins主文件夹并打开jenkins.xml文件:%Jenkins_Home%/jenkins.xml
您将找到标签%BASE%\jre\bin\java
。将标记替换为系统安装的java路径,例如C:\Program Files (x86)\Java\jre1.8.0_144\bin\java
现在您不应该遇到问题。
答案 7 :(得分:0)
对于Jenkins的较新版本 转到Jenkins->管理Jenkins->配置全局安全性,选中选项使用浏览器进行元数据下载 [默认情况下未选中],然后重新启动Jenkins
答案 8 :(得分:0)
开发机器:
答案 9 :(得分:0)
wget updates.jenkins.io/download/plugins/skip-certificate-check/1.0/... 到 $JENKINS_HOME/plugins 并重新启动服务器,插件更新再次开始工作
答案 10 :(得分:0)
我开始收到以下错误消息:SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
完全没有实现,可追溯到2020年8月,我的两台Jenkins构建服务器运行在Windows服务器上。它阻止了Jenkins核心和所有插件的更新。
在这里从其他人那里获得一些线索后,我决定安装最新版本的JRE(在我的情况下为v1.8.0_261),希望可以更新cacert。安装最新的JRE在这里创建了一个新文件夹:C:\Program Files (x86)\Java\jre1.8.0_261
Jenkins指向一个文件夹:C:\Program Files (x86)\Jenkins\jre
。首先,我停止了詹金斯服务。第二,我备份然后删除该C:\Program Files (x86)\Jenkins\jre
文件夹,并将C:\Program Files (x86)\Java\jre1.8.0_261
复制到C:\Program Files (x86)\Jenkins\jre
。
这可能不是最佳做法,但它解决了我的错误。
答案 11 :(得分:0)
我能够通过将JVM更新到较新版本来解决此问题。看来新版本的JVM信任了必要的CA证书,以允许下载新的詹金斯大战。
答案 12 :(得分:0)
转到C:\ Program Files \ Java \ jdk1.8.0_45 \ jre \ lib \ security
cmd C:\ Program Files \ Java \ jdk1.8.0_45 \ jre \ lib \ security
在给java -jar jenkins.war之后,它将解决证书问题
答案 13 :(得分:0)
将从浏览器下载的根CA(GlobalSign.cer)添加到JAVA_HOME / jre / lib / security / cacerts。
您可以使用&#34; Keystore explorer&#34;将根CA添加到Java cacerts的工具。检查此link以获取将根CA添加到Java cacerts的步骤序列:
将Root CA成功添加到Java证书后,重新启动Jenkins。
答案 14 :(得分:0)
我刚刚用jdk cacerts推出jenkins.war作为解决方法 java -Djavax.net.ssl.trustStore =&#34; /scratch/install/jdk1.8.0_102/jre/lib/security/cacerts" -jar jenkins.war&amp;
答案 15 :(得分:0)
Windows
上的Jeinkins在我的电脑上安装独立的Java版本后,上述错误消失了。
确切地说,我已经从Java SE Development Kit 8 Downloads安装了JDK 8u162(Java SE Development Kit 8u162)
答案 16 :(得分:0)
虽然上述答案通常是正确的,但也可能是由于链中的证书过期(服务器证书,中间,根)。刚收到相同的错误,我的服务器证书已过期。
答案 17 :(得分:-1)
管理Jenkins>管理插件>单击“高级”选项卡>向下滚动到“更新站点”