You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins RHEL代理节点JNLP连接失败报ConnectionRefusalException

问题根因

该故障的核心触发原因是Jenkins代理节点与服务端TLS协议版本不匹配。
从服务端日志javax.net.ssl.SSLHandshakeException: Client requested protocol TLSv1 is not enabled or supported in server context可以直接定位:代理节点和Jenkins服务端50000代理通信端口建立连接时,发起SSL握手请求使用的是已经被淘汰的不安全协议TLSv1,但Jenkins服务端受Java安全策略、版本配置限制,已经禁用了TLSv1、TLSv1.1这类低版本TLS协议,仅支持TLSv1.2及以上版本的连接,因此直接拒绝了握手请求,在客户端侧就表现为连接未收到确认就被关闭、JNLP协议握手失败、重试被拒的报错。
这类问题在RHEL系统的旧版本Java环境中非常常见:如果代理节点安装的是OpenJDK 8早期版本(低于8u161),或者系统/Java安全配置被手动修改过,客户端默认发起TLS连接时不会优先使用TLSv1.2,就会触发该问题。

排查步骤
  • 确认代理节点Java版本:在代理节点执行java -version查看版本信息,若版本为OpenJDK 8u161以下的旧版本,大概率存在默认TLS版本过低的问题。
  • 检查Java安全配置:找到Java安装路径下的jre/lib/security/java.security配置文件,检索两个配置项:一是jdk.tls.disabledAlgorithms,确认是否错误禁用了TLSv1.2、TLSv1.3;二是jdk.tls.client.protocols,确认是否被手动设置为仅允许TLSv1等低版本协议。
  • 验证TLS协商结果:在代理节点执行openssl s_client -connect app.test.sl.com:50000 -tls1测试TLSv1连接,会返回握手失败;再执行openssl s_client -connect app.test.sl.com:50000 -tls1_2测试TLSv1.2连接,可正常完成握手,即可确认服务端的TLS协议限制策略。
修复方案
  • 优先修复(推荐):升级代理节点Java版本到长期支持版本,建议和Jenkins服务端Java版本对齐,可选OpenJDK 11、OpenJDK 17,若要继续使用Java 8则至少升级到8u312以上的更新版本。这类新版本Java默认将TLSv1.2、TLSv1.3作为客户端TLS握手的默认协议,升级完成后重新执行agent启动命令即可正常连接。
  • 临时修复(无需升级Java):启动agent.jar时通过JVM启动参数强制指定客户端使用的TLS协议版本,命令示例如下:
java -Djdk.tls.client.protocols=TLSv1.2,TLSv1.3 -jar agent.jar -jnlpUrl http://app.test.sl.com:8080/computer/<你的代理节点名称>/slave-agent.jnlp -secret <对应节点的连接密钥> -workDir "/opt/jenkins_agent"
  • 永久配置修复:如果不想每次启动agent都追加JVM参数,可以直接修改代理节点Java的jre/lib/security/java.security配置文件,新增或修改jdk.tls.client.protocols配置项,值设为TLSv1.2,TLSv1.3,保存后重启agent进程即可永久生效。

内容的提问来源于stack exchange,提问作者kr_devops

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 10:09:46