按照文档使用 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 而不验证证书
在您的问题中,您使用端口 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
仅对于非公共证书(例如自签名证书)才需要此导入,但您可以尝试。可能存在证书链,如此处所述。
我尝试过
但是上面没有任何作用。
最后,我能够通过绕过以下命令末尾的 -noCertificateCheck 从从服务器连接到主服务器:
java -jar agent.jar -jnlpUrl https://example.com/computer/windows_slave/jenkins-agent.jnlp -secret [secret] -noCertificateCheck
我的问题是我需要将整个证书链导入到java密钥库中
像 Chrome 这样的浏览器将遵循 aia 扩展并为您下载链,但 java 密钥库会让您的生活变得困难。