当前位置: 首页 > news >正文

Jenkins 节点连接故障定位及解决方案总结 - PKIX path validation failed


一、故障现象

Jenkins 节点通过 Java Web 方式连接时,报错:

java.io.IOException: Failed to connect to https://xxxx.zte.com.cn/yyyy/tcpSlaveAgentListener/: PKIX path validation failed: java.security.cert.CertPathValidatorException: validity check failed

二、故障定位及解决方案
1. 证书有效性验证失败

原因:Java 客户端无法验证 Jenkins 服务器的 SSL 证书,常见于以下情况:

  • 证书已过期。
  • 系统时间不正确导致证书有效期校验失败。
  • 自签名证书未被信任。
  • 证书链不完整(缺少中间证书)。

解决方案

(1) 检查证书有效期
# 使用 openssl 检查证书有效期
openssl s_client -connect xxxx.zte.com.cn:443 -servername xxxx.zte.com.cn | openssl x509 -noout -dates
  • 证书过期:需在服务器端更新证书(如 Let’s Encrypt 证书需续订)。
  • 证书未过期:继续排查其他原因。
(2) 检查系统时间

系统时间不正确会导致证书有效期校验失败,需同步客户端和服务器时间。

2. 系统时间同步(重点细化)
(1) 查看当前时间
# 查看系统时间
date# 查看硬件时钟时间(BIOS 时间)
sudo hwclock --show
(2) 手动设置系统时间(临时方案)

仅用于紧急修复,长期建议使用 NTP 服务

# 设置系统时间为 2024-01-01 12:00:00(示例)
sudo date -s "2024-01-01 12:00:00"# 验证系统时间是否已更新
date
(3) 同步系统时间到硬件时钟

确保重启后时间持久化

# 将系统时间写入硬件时钟
sudo hwclock --systohc# 验证硬件时钟时间
sudo hwclock --show
(4) 配置 NTP 服务(长期方案)
# Ubuntu/Debian
sudo apt install ntpdate -y
sudo ntpdate pool.ntp.org
sudo systemctl start systemd-timesyncd
sudo systemctl enable systemd-timesyncd# CentOS/RHEL
sudo yum install ntp -y
sudo ntpdate pool.ntp.org
sudo systemctl start chronyd
sudo systemctl enable chronyd
(3) 导入证书到 Java 信任库

适用于自签名证书或内部 CA 签发的证书

(1) 导出服务器证书
openssl s_client -connect xxxx.zte.com.cn:443 -servername xxxx.zte.com.cn </dev/null | openssl x509 -out jenkins-cert.pem
(2) 查找 Java 信任库路径
# 默认路径(根据实际安装位置调整)
sudo find / -name "cacerts" 2>/dev/null
(3) 导入证书到信任库
# 导入证书(默认密码:changeit)
sudo keytool -import -alias jenkins-cert -keystore /path/to/java/lib/security/cacerts -file jenkins-cert.pem
  • 输入 yes 确认信任证书。
(4) 重启 Jenkins 节点
# 重启 Jenkins 服务或节点进程
sudo systemctl restart jenkins
(4) 检查证书链完整性

确保服务器配置了完整的证书链(包括中间证书)

openssl s_client -connect xxxx.zte.com.cn:443 -showcerts
  • 证书链缺失:在服务器(如 Nginx/Apache)配置中补充中间证书。

三、验证故障是否解决
  1. 查看 Jenkins 节点日志
tail -f /var/log/jenkins/jenkins.log
  1. 手动触发节点连接
    • 在 Jenkins Web 界面中,进入 节点管理目标节点启动代理

四、注意事项
  1. 手动设置时间仅为临时方案,长期需通过 NTP 服务同步时间,避免时间漂移。
  2. 自签名证书需定期更新,并在 Java 信任库中同步更新。
  3. 生产环境禁用临时证书验证方案(如跳过 SSL 校验),避免安全风险。

五、总结流程图
1. 证书有效性验证失败├─ 检查证书是否过期 → 是:更新证书 → 结束├─ 检查系统时间 → 不正确:同步时间(手动或 NTP) → 重新验证├─ 导入证书到 Java 信任库 → 重新启动节点 → 验证连接└─ 检查证书链完整性 → 补充中间证书 → 重新验证

通过以上步骤,可系统化定位并解决 Jenkins 节点连接时的 SSL 证书验证失败问题。

http://www.dtcms.com/a/304380.html

相关文章:

  • 如何创建一个 Solana 钱包?
  • 在 Ubuntu 下测试单目与双目相机
  • ubuntu 25.04 自带JS引擎gjs运行GTK with JavaScript 应用
  • B+树高效实现与优化技巧
  • 微服务 01
  • FastAPI后台任务:异步魔法还是同步噩梦?
  • Spring Boot with RabbitMQ:四大核心模式指南
  • 代码随想录算法训练营第三十天|0/1背包问题
  • 如何保证DoIP的网络安全?
  • rtp、rtcp、rtsp、rtmp协议详解
  • 嵌入式学习日志(十一)
  • 【windows系统服务端ssh免密登录配置坑】
  • 低空经济应用-无人机拉格朗日粒子追踪技术
  • 阿里云上进行k8s集群的配置
  • 电脑没有声音了怎么恢复 快速解决音频故障
  • 使用 Databend Cloud 归档 OceanBase 数据数据库
  • ElasticStack技术栈概述及Elasticsearch8.2.2集群部署并更换JDK版本为openjdk-17
  • 路由器路由协议详解:从 RIP 到 OSPF 的技术演进
  • TRACERT命令
  • 迅为RK3588开发板安卓GPIO调用-APP运行测试
  • HarmonyOS-ArkUI Web控件基础铺垫6--TCP协议- 流量控制算法与拥塞控制算法
  • LeetCode Hot 100 搜索二维矩阵
  • 抽象工厂模式 Abastract Factory Pattern
  • 从本地 Docker 部署的 Dify 中导出知识库内容(1.6版本亲测有效)
  • 设计一个高可用、可拓展、监控报警系统,使用普罗米修斯和grafana,并给出go实现
  • 无穿戴动作捕捉技术:驱动历史活化、乐园叙事与教育沉浸的文旅利器
  • JVM知识点(2)
  • 从协议栈到ath12k_mac_op_tx的完整调用路径
  • Leetcode——41. 缺失的第一个正数
  • 前端学习日记(十五)