Gitaly TLS 支持
Gitaly 支持 TLS 加密。要与监听安全连接的 Gitaly 实例通信,请在 GitLab 配置中相应存储条目的 gitaly_address 中使用 tls:// URL 方案。
Gitaly 在 TLS 连接中向 GitLab 提供与客户端证书相同的服务器证书。当结合验证客户端证书的反向代理(例如 NGINX)时,这可作为双向 TLS 认证策略的一部分,用于授予 GitLab 访问权限。
您必须自行提供证书,因为系统不会自动提供。每个 Gitaly 服务器对应的证书必须安装在该 Gitaly 服务器上。
此外,证书(或其证书颁发机构)必须安装在所有以下位置:
- Gitaly 服务器
- 与之通信的 Gitaly 客户端
如果使用负载均衡器,它必须能够使用 ALPN TLS 扩展协商 HTTP/2。
证书要求
- 证书必须指定您用于访问 Gitaly 服务器的地址。您必须将主机名或 IP 地址作为主题备用名称添加到证书中。
- 您可以同时为 Gitaly 服务器配置未加密的监听地址
listen_addr和加密的监听地址tls_listen_addr。这允许您在必要时逐步从未加密流量过渡到加密流量。 - 证书的通用名字段将被忽略。
为 Gitaly 配置 TLS
在配置 TLS 支持之前,请先配置 Gitaly。
配置 TLS 支持的过程取决于您的安装类型。
-
为 Gitaly 服务器创建证书。
-
在 Gitaly 客户端上,将证书(或其证书颁发机构)复制到
/etc/gitlab/trusted-certs:sudo cp cert.pem /etc/gitlab/trusted-certs/ -
在 Gitaly 客户端上,按如下方式编辑
/etc/gitlab/gitlab.rb中的gitlab_rails['repositories_storages']:gitlab_rails['repositories_storages'] = { 'default' => { 'gitaly_address' => 'tls://gitaly1.internal:9999' }, 'storage1' => { 'gitaly_address' => 'tls://gitaly1.internal:9999' }, 'storage2' => { 'gitaly_address' => 'tls://gitaly2.internal:9999' }, } -
保存文件并重新配置 GitLab。
-
在 Gitaly 服务器上,创建
/etc/gitlab/ssl目录并将密钥和证书复制到其中:sudo mkdir -p /etc/gitlab/ssl sudo chmod 755 /etc/gitlab/ssl sudo cp key.pem cert.pem /etc/gitlab/ssl/ sudo chmod 644 /etc/gitlab/ssl/cert.pem sudo chmod 600 /etc/gitlab/ssl/key.pem # 对于 Linux 包安装,'git' 是默认用户名。如果已更改默认值,请修改以下命令 sudo chown -R git /etc/gitlab/ssl -
将所有 Gitaly 服务器证书(或其证书颁发机构)复制到所有 Gitaly 服务器和客户端的
/etc/gitlab/trusted-certs,以便 Gitaly 服务器和客户端在调用自身或其他 Gitaly 服务器时信任该证书:sudo cp cert1.pem cert2.pem /etc/gitlab/trusted-certs/ -
编辑
/etc/gitlab/gitlab.rb并添加:gitaly['configuration'] = { # ... tls_listen_addr: '0.0.0.0:9999', tls: { certificate_path: '/etc/gitlab/ssl/cert.pem', key_path: '/etc/gitlab/ssl/key.pem', ## 可选配置 Gitaly 向客户端提供的最小 TLS 版本。 ## ## 默认值:"TLS 1.2" ## 选项:["TLS 1.2", "TLS 1.3"]。 # # min_version: "TLS 1.2" }, } -
保存文件并重新配置 GitLab。
-
在 Gitaly 客户端(例如 Rails 应用程序)上运行
sudo gitlab-rake gitlab:gitaly:check,确认其能连接到 Gitaly 服务器。 -
通过观察 Gitaly 连接类型验证 Gitaly 流量是否通过 TLS 传输。
-
可选操作。通过以下方式提高安全性:
- 在
/etc/gitlab/gitlab.rb中注释或删除gitaly['configuration'][:listen_addr]以禁用非 TLS 连接。 - 保存文件。
- 重新配置 GitLab。
- 在
-
为 Gitaly 服务器创建证书。
-
在 Gitaly 客户端上,将证书复制到系统信任证书目录:
sudo cp cert.pem /usr/local/share/ca-certificates/gitaly.crt sudo update-ca-certificates -
在 Gitaly 客户端上,编辑
/home/git/gitlab/config/gitlab.yml中的storages,将gitaly_address更改为使用 TLS 地址。例如:gitlab: repositories: storages: default: gitaly_address: tls://gitaly1.internal:9999 gitaly_token: AUTH_TOKEN_1 storage1: gitaly_address: tls://gitaly1.internal:9999 gitaly_token: AUTH_TOKEN_1 storage2: gitaly_address: tls://gitaly2.internal:9999 gitaly_token: AUTH_TOKEN_2 -
保存文件并重启 GitLab。
-
在 Gitaly 服务器上,创建或编辑
/etc/default/gitlab并添加:export SSL_CERT_DIR=/etc/gitlab/ssl -
在 Gitaly 服务器上,创建
/etc/gitlab/ssl目录并将密钥和证书复制到其中:sudo mkdir -p /etc/gitlab/ssl sudo chmod 755 /etc/gitlab/ssl sudo cp key.pem cert.pem /etc/gitlab/ssl/ sudo chmod 644 /etc/gitlab/ssl/cert.pem sudo chmod 600 /etc/gitlab/ssl/key.pem # 将所有权设置为运行 Gitaly 的同一用户 sudo chown -R git /etc/gitlab/ssl -
将所有 Gitaly 服务器证书(或其证书颁发机构)复制到系统信任证书目录,以便 Gitaly 服务器在调用自身或其他 Gitaly 服务器时信任该证书。
sudo cp cert.pem /usr/local/share/ca-certificates/gitaly.crt sudo update-ca-certificates -
编辑
/home/git/gitaly/config.toml并添加:tls_listen_addr = '0.0.0.0:9999' [tls] certificate_path = '/etc/gitlab/ssl/cert.pem' key_path = '/etc/gitlab/ssl/key.pem' -
保存文件并重启 GitLab。
-
通过观察 Gitaly 连接类型验证 Gitaly 流量是否通过 TLS 传输。
-
可选操作。通过以下方式提高安全性:
- 在
/home/git/gitaly/config.toml中注释或删除listen_addr以禁用非 TLS 连接。 - 保存文件。
- 重启 GitLab。
- 在
更新证书
初始配置后更新 Gitaly 证书:
如果 /etc/gitlab/ssl 目录下的 SSL 证书内容已更新,但未对 /etc/gitlab/gitlab.rb 进行配置更改,则重新配置 GitLab 不会影响 Gitaly。您必须手动重启 Gitaly 才能使证书被 Gitaly 进程加载:
sudo gitlab-ctl restart gitaly如果在不更改 /etc/gitlab/gitlab.rb 文件的情况下更改或更新了 /etc/gitlab/trusted-certs 中的证书,您必须:
-
重新配置 GitLab 以更新信任证书的符号链接。
-
手动重启 Gitaly 以使证书被 Gitaly 进程加载:
sudo gitlab-ctl restart gitaly
观察 Gitaly 连接类型
有关观察 Gitaly 连接类型的信息,请参阅相关文档。