Jenkins插件管理器:插件数据更新失败故障咨询
你碰到的这个java.security.cert.CertificateException异常,核心原因是Jenkins访问更新服务器updates.jenkins.io时,SSL证书里的DNS备用名称不匹配,导致Java的证书校验逻辑触发了错误。下面给你几个实用的解决思路:
1. 排查本地DNS解析问题
有时候本地DNS缓存过期或者解析错误,会让域名指向了错误的IP,进而引发证书校验失败。可以这么操作:
- 在Jenkins服务器上执行
ping updates.jenkins.io,确认返回的IP是Jenkins官方更新服务器的合法地址 - 清空本地DNS缓存:Linux系统可以用
systemctl restart nscd(如果依赖nscd服务),Windows系统执行ipconfig /flushdns
2. 临时跳过证书校验(仅测试/临时场景用)
如果只是急需更新插件,可以修改Jenkins启动参数,让Java暂时跳过SSL证书校验:
- 找到Jenkins的启动配置文件(比如
/etc/default/jenkins或者自定义启动脚本) - 在
JAVA_ARGS中添加参数:-Djavax.net.ssl.trustStore=/dev/null -Djavax.net.ssl.trustStorePassword=changeit(注意:这种方式不安全,生产环境不建议长期使用) - 重启Jenkins服务后,再尝试执行插件更新操作
3. 导入正确证书到Java信任库(生产环境推荐)
最安全的做法是把updates.jenkins.io的合法证书导入到Jenkins使用的Java信任库中:
- 先下载证书:执行
openssl s_client -connect updates.jenkins.io:443 < /dev/null | openssl x509 -outform PEM > jenkins-updates.crt - 找到Jenkins对应Java的信任库路径,通常是
$JAVA_HOME/jre/lib/security/cacerts - 用keytool导入证书:
keytool -import -alias jenkins-updates -file jenkins-updates.crt -keystore $JAVA_HOME/jre/lib/security/cacerts,默认信任库密码是changeit - 重启Jenkins服务,再次尝试插件更新
4. 检查Jenkins代理配置
如果你的Jenkins通过代理访问外网,可能是代理服务器篡改了SSL连接或者配置有误:
- 进入Jenkins「系统管理」→「全局安全配置」,核对代理设置的正确性
- 测试关闭代理后直接访问更新服务器,看是否能正常完成校验
异常信息回顾:
java.security.cert.CertificateException: No subject alternative DNS name matching updates.jenkins.io found.
at sun.security.util.HostnameChecker.matchDNS(HostnameChecker.java:214)
at sun.security.util.HostnameChecker.match(HostnameChecker.java:96)
at sun.security.ssl.X509TrustManagerImpl.checkIdentity(X509TrustManagerImpl.java:455)
at sun.security.ssl.X509TrustManagerImpl.checkIdentity...
内容的提问来源于stack exchange,提问作者mvw

