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生成即可,全程不需要复杂操作:
- 新建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
- 执行命令生成私钥和自签名证书:
# 生成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
- 校验证书是否正确带上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
相关产品推荐
相关产品推荐

