GitLab社区版多访问地址场景下自签名SSL证书配置问题
GitLab Omnibus 多场景自签SSL配置方案
不需要为不同地址单独配置HTTPS,只需生成一张包含**所有访问标识(内网IP、外部IP、外部域名)**的多SAN(Subject Alternative Name)自签名证书,再统一配置GitLab即可覆盖所有访问场景。
1. 生成多SAN自签名证书
方法1:直接用OpenSSL命令生成(快速操作)
在GitLab服务器上执行以下命令,替换<内网IP>、<外部IP>、<外部域名>为实际值,多个标识用逗号分隔:
# 先创建SSL目录(若不存在) mkdir -p /etc/gitlab/ssl && chmod 700 /etc/gitlab/ssl # 生成带多SAN的自签证书 openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \ -keyout /etc/gitlab/ssl/gitlab.key \ -out /etc/gitlab/ssl/gitlab.crt \ -subj "/CN=<外部域名>" \ -addext "subjectAltName=IP:<内网IP>,IP:<外部IP>,DNS:<外部域名>" \ -addext "keyUsage=digitalSignature,keyEncipherment" \ -addext "extendedKeyUsage=serverAuth"
- 若没有外部域名,
CN可设为<外部IP>,SAN字段仍需包含所有访问IP
方法2:通过配置文件生成(复杂场景适配)
如果需要添加更多访问标识,先创建临时配置文件openssl-san.cnf:
[req] default_bits = 4096 prompt = no default_md = sha256 distinguished_name = dn x509_extensions = v3_ext [dn] CN = <外部域名> [v3_ext] subjectAltName = @alt_names keyUsage = digitalSignature, keyEncipherment extendedKeyUsage = serverAuth [alt_names] IP.1 = <内网IP> IP.2 = <外部IP> DNS.1 = <外部域名> # 新增标识可继续添加IP.3、DNS.2等
再执行生成命令:
openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \ -keyout /etc/gitlab/ssl/gitlab.key \ -out /etc/gitlab/ssl/gitlab.crt \ -config openssl-san.cnf
2. 配置GitLab Omnibus
编辑GitLab核心配置文件/etc/gitlab/gitlab.rb,修改以下内容:
# 设置主要访问入口(优先用外部域名,无域名则用外部IP) external_url 'https://<外部域名>' # 指定SSL证书和密钥路径 nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.crt" nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.key" # 强制HTTP跳转HTTPS(建议开启) nginx['redirect_http_to_https'] = true # 允许所有访问标识匹配(确保Nginx响应所有IP/域名请求) nginx['server_name'] = "<内网IP> <外部IP> <外部域名>" # 也可使用通配符:nginx['server_name'] = "_;"
保存后重新配置并重启GitLab:
gitlab-ctl reconfigure gitlab-ctl restart nginx
3. 客户端信任证书
由于是自签名证书,所有访问GitLab的客户端必须导入gitlab.crt证书,否则会触发SSL错误:
- 浏览器:将证书导入系统「受信任的根证书颁发机构」
- Git命令行:
- Linux/macOS:复制证书到
/etc/ssl/certs/,执行update-ca-certificates - Windows:在Git Bash中执行
git config --global http.sslCAinfo /path/to/gitlab.crt
- Linux/macOS:复制证书到
关键注意事项
- SAN字段必须包含所有可能的访问IP/域名,否则客户端会提示「证书不匹配」
- 无需为不同地址单独配置HTTPS,单证书+Nginx统一配置即可覆盖所有场景
- 后续新增访问标识时,只需重新生成包含新标识的SAN证书,替换原有证书后重启GitLab即可
内容的提问来源于stack exchange,提问作者lorZ02
相关产品推荐
相关产品推荐

