SSL 证书实施后,Jenkins 代理出现“无效的 X-Instance-Identity”

SSL 证书实施后,Jenkins 代理出现“无效的 X-Instance-Identity”

我有一个 Jenkins 2.371 实例。为了安全起见,我已申请并实施了 SSL 证书。Jenkins UI 现在运行良好https://servername.domain.com/

问题出在代理上。我已经jks使用 keytool 将证书链导入 jdk,因此证书完全没有问题。当我启动代理时,出现错误:

严重的:https://服务器名称.domain.com/tcpSlaveAgentListener/似乎正在发布无效的 X-Instance-Identity。java.io.IOException:https://服务器名称.domain.com/tcpSlaveAgentListener/似乎正在发布无效的 X-Instance-Identity。位于 org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver.resolve(JnlpAgentEndpointResolver.java:284) 位于 hudson.remoting.Engine.innerRun(Engine.java:744) 位于 hudson.remoting.Engine.run(Engine.java:543)

因此,看起来服务器公布的 URL 不是代理所期望的。

出于参考目的(但不相关),将 jks 添加到 cacerts 存储区的 keytool 命令如下:

keytool -import -alias /tmp/jenkins.jks -cacerts -keypass 'Password' -file servername_domain_com.cer -storepass 'changeit'

至于代理启动。我agent.jar再次下载了,因为移动到了https通常的位置:

java -jar agent.jar -jnlpUrl https://servername.domain.com/computer/agenthostname/jenkins-agent.jnlp -secret @secret-file -workDir "/opt/jenkins"

代理启动包括jnlp。我这样说是因为,我发现的有关类似错误的唯一文章指出jnlp应该排除该路径,但遗憾的是,这没有什么意义,但我确实尝试了,但是代理现在只是重试连接,因为它没有得到预期的响应。

我没有任何反向代理设置,所以这也不是问题。

PS!! 我确实提取了该war文件并查看了java出现此错误的文件,但不幸的是,找到有用的帮助相当困难。

答案1

问题解决了。

我反编译了jenkins.war导致错误的相关 java 文件,以帮助我调试原因。错误是由 java 文件JnlpAgentEndpointResolver.java第 284 行生成的,如下所示。

try {
       identity = getIdentity(idHeader);
       if (identity == null) {
         firstError = chain(firstError, new IOException( // The Error gets generated here
         salURL + " appears to be publishing an invalid X-Instance-Identity."));
                        continue;
    }

因此,我发现标题中没有该身份。

维护 RSA 公钥/私钥对至关重要。

因此,简单的解决方法是简单地安装为此提供的插件,称为Instance Identity

相关内容