Jenkins Windows 代理认为我的证书无效

问题描述 投票:0回答:3

按照文档使用 Java Web Start,我已经在代理上运行此命令以连接到控制器了:

java -jar agent.jar -jnlpUrl https://my-server.com:8888/computer/myslave/slave-agent.jnlp -secret sdfsdfsdfsdf -workDir "c:\Jenkins"

我有有效的公共证书。从从站我可以访问https://my-server.com:8888并且chrome说证书是有效的那么为什么Jenkins会抱怨呢?当我花了很多钱买这该死的东西时,使用

-noCertificateCheck
似乎很愚蠢

2018 年 3 月 28 日 9:34:49 下午 org.jenkinsci.remoting.engine.WorkDirManager 初始化工作目录信息:使用 c:\Jenkins 将情感作为远程工作 错误和输出日志都将打印到目录 c:\詹金斯 线程“主”java.io.IOException 中的表情异常: 无法验证服务器证书。如果您使用的是 自签名证书,您可以使用 -noCertificateCheck 选项 绕过此检查。 在 hudson.remoting.Launcher.parseJnlpArguments(Launcher.java:548) 在 hudson.remoting.Launcher.run(Launcher.java:322) 在 hudson.remoting.Launcher.main(Launcher.java:283) 引起:javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException:PKIX 路径构建失败: sun.security.provider.certpath.SunCertPathBuilderException:无法 找到请求目标的有效认证路径 在 sun.security.ssl.Alerts.getSSLException(来源未知) 在 sun.security.ssl.SSLSocketImpl.fatal(来源未知) 在 sun.security.ssl.Handshaker.fatalSE(来源未知) 在 sun.security.ssl.Handshaker.fatalSE(来源未知) 在 sun.security.ssl.ClientHandshaker.serverCertificate(来源未知) 在 sun.security.ssl.ClientHandshaker.processMessage(来源未知) 在 sun.security.ssl.Handshaker.processLoop(来源未知) 在 sun.security.ssl.Handshaker.process_record(来源未知) 在 sun.security.ssl.SSLSocketImpl.readRecord(来源未知) 在 sun.security.ssl.SSLSocketImpl.performInitialHandshake(来源未知) 在 sun.security.ssl.SSLSocketImpl.startHandshake(来源未知) 在 sun.security.ssl.SSLSocketImpl.startHandshake(来源未知) 在 sun.net.www.protocol.https.HttpsClient.afterConnect(来源未知) 在 sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(未知 来源) 在 sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(未知 来源) 在 hudson.remoting.Launcher.parseJnlpArguments(Launcher.java:490) ... 2 个以上 引起者:sun.security.validator.ValidatorException:PKIX 路径构建失败: sun.security.provider.certpath.SunCertPathBuilderException:无法 找到请求目标的有效认证路径 在 sun.security.validator.PKIXValidator.doBuild(来源未知) 在 sun.security.validator.PKIXValidator.engineValidate(来源未知) 在 sun.security.validator.Validator.validate(来源未知) 在 sun.security.ssl.X509TrustManagerImpl.validate(来源未知) 在 sun.security.ssl.X509TrustManagerImpl.checkTrusted(来源未知) 在 sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(未知 来源) ... 14 更多 引起者:sun.security.provider.certpath.SunCertPathBuilderException:无法 找到请求目标的有效认证路径 在 sun.security.provider.certpath.SunCertPathBuilder.build(未知 来源) 在 sun.security.provider.certpath.SunCertPathBuilder.engineBuild(未知 来源) 在 java.security.cert.CertPathBuilder.build(来源未知) ...还有20个

编辑: 所以我根本无法连接。如果我使用

-noCertificateCheck
我会得到
Incorrect acknowledgement sequence
我假设是因为我使用 HTTPS 而不验证证书

java windows jenkins java-web-start jenkins-agent
3个回答
5
投票

在您的问题中,您使用端口 8888 (https://my-server.com:8888)。我看到的 jnlp 脚本端口不存在或者是 443。

当我看到像你这样的错误时,我将证书导入到Java密钥库中。欲了解更多详情这里。

keytool -import -alias $ALIAS -keystore $JAVA_HOME/jre/lib/security/cacerts -file $PATH_TO_PEM_FILE

仅对于非公共证书(例如自签名证书)才需要此导入,但您可以尝试。可能存在证书链,如此处所述。


4
投票

我尝试过

  1. 更新从机上的 Java 以获取 Java 最新的信任存储。
  2. 使用公共 SSL 手动更新 Java 信任存储(步骤)

但是上面没有任何作用。

最后,我能够通过绕过以下命令末尾的 -noCertificateCheck 从从服务器连接到主服务器:

java -jar agent.jar -jnlpUrl https://example.com/computer/windows_slave/jenkins-agent.jnlp -secret [secret] -noCertificateCheck

2
投票

我的问题是我需要将整个证书链导入到java密钥库中

像 Chrome 这样的浏览器将遵循 aia 扩展并为您下载链,但 java 密钥库会让您的生活变得困难。

© www.soinside.com 2019 - 2024. All rights reserved.