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

GitLab Runner注册x509证书依赖旧CN字段需用SAN报错解决咨询

GitLab Runner注册x509 SAN字段报错解答

1. 根因判断是否正确

你的判断完全准确。这个报错的核心原因是当前GitLab使用的SSL证书仅配置了传统Common Name(CN)字段,缺失主题备用名称(SAN)扩展。GitLab Runner依赖的Go运行时从1.15版本开始就强制废弃了仅靠CN字段做证书域名校验的逻辑,没有SAN字段的证书会直接判定为非法,和你查阅资料得到的结论一致。

2. 两种证书替换方案的操作复杂度对比

给GitLab配置专用合规证书的方案操作更简便、风险更低:

  • 更换系统全局证书需要更新全系统的信任链,操作后会影响服务器上所有依赖系统证书库的服务,一旦配置出错排查成本高;
  • 仅替换GitLab自身使用的SSL证书,只会涉及GitLab本身的配置重载,不会干扰服务器上跑的其他业务,回滚只需要把旧证书改回去就行,操作成本低很多。

3. 相关证书路径说明

Ubuntu系统侧证书路径

  • 自定义新增的信任CA证书存放目录:/usr/local/share/ca-certificates/,证书文件后缀必须为.crt
  • 系统整合后的全局信任证书库路径:/etc/ssl/certs/ca-certificates.crt
  • 新增证书后执行更新生效的命令:sudo update-ca-certificates

Omnibus版GitLab(即按官方Ubuntu指南安装的版本)证书配置路径

  • GitLab内置Nginx使用的SSL证书默认存放目录:/etc/gitlab/ssl/,对应域名的证书命名规则为<你的GitLab域名>.crt,私钥命名规则为<你的GitLab域名>.key
  • 证书路径的配置项在GitLab主配置文件/etc/gitlab/gitlab.rb中,对应参数为nginx['ssl_certificate']和nginx['ssl_certificate_key'],如果改了证书存放位置需要对应修改这两个参数。

4. 符合要求的带SAN字段证书生成步骤

直接用OpenSSL生成即可,全程不需要复杂操作:

  1. 新建OpenSSL配置文件,比如命名为gitlab-san.cnf,把里面的域名、地域信息替换成你自己的实际信息:
[req]
default_bits = 4096
prompt = no
default_md = sha256
distinguished_name = dn
req_extensions = req_ext

[dn]
C = CN
ST = 你的所在省份
L = 你的所在城市
O = 你的组织/公司名
CN = myGitlab.com

[req_ext]
subjectAltName = @alt_names

[alt_names]
DNS.1 = myGitlab.com
# 有其他备用域名、内网IP访问需求的话往下追加即可,示例:
# DNS.2 = gitlab.internal.lan
# IP.1 = 192.168.1.100
  1. 执行命令生成私钥和自签名证书:
# 生成4096位私钥
openssl genrsa -out myGitlab.com.key 4096
# 生成有效期10年、带SAN扩展的自签名证书
openssl req -new -x509 -days 3650 -key myGitlab.com.key -out myGitlab.com.crt -config gitlab-san.cnf -extensions req_ext
  1. 校验证书是否正确带上SAN扩展,避免无效操作:
openssl x509 -in myGitlab.com.crt -text -noout | grep -A 5 "Subject Alternative Name"

命令输出能看到你之前配置的所有DNS、IP条目就说明证书合规。
4. 把生成的myGitlab.com.crt和myGitlab.com.key移动到/etc/gitlab/ssl/目录下,给两个文件设置600权限、属主为root,之后执行sudo gitlab-ctl reconfigure等GitLab重载完配置就生效了。

网传排障方案实测说明

你在Stack Overflow看到的两类方案实测情况如下:

  • 临时给注册命令加--tls-skip-verify参数跳过证书校验的方案确实能绕过报错注册成功,但只适合纯测试环境临时用,生产环境绝对不推荐,这个参数会关闭Runner和GitLab通信的所有证书校验逻辑,存在中间人攻击风险;
  • 替换带SAN字段合规证书的方案是经过大量生产环境实测的标准解法,替换完成后不仅Runner注册不会报错,GitLab页面访问、API对接、容器仓库推拉、第三方系统集成等所有涉及SSL校验的场景都不会再出现同类证书问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:27:23