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

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

关键注意事项

  • SAN字段必须包含所有可能的访问IP/域名,否则客户端会提示「证书不匹配」
  • 无需为不同地址单独配置HTTPS,单证书+Nginx统一配置即可覆盖所有场景
  • 后续新增访问标识时,只需重新生成包含新标识的SAN证书,替换原有证书后重启GitLab即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 13:26:16