极狐GitLab 的 Gitaly 支持 TLS 加密。要与监听安全连接的 Gitaly 实例通信,请在极狐GitLab 配置的相应存储项的 gitaly_address
中使用 tls://
URL 方案。
极狐GitLab 的 Gitaly 在 TLS 连接中提供与客户端证书相同的服务器证书。当与验证客户端证书以授予访问极狐GitLab 权限的反向代理(例如 NGINX)结合使用时,这可以用作双向 TLS 身份验证策略的一部分。
您必须自行提供证书,因为这不是自动提供的。对应每个 Gitaly 服务器的证书必须安装在该 Gitaly 服务器上。
此外,证书(或其证书颁发机构)必须安装在所有:
- Gitaly 服务器。
- 与其通信的 Gitaly 客户端。
如果使用负载均衡器,它必须能够使用 ALPN TLS 扩展协商 HTTP/2。
证书要求
- 证书必须指定用于访问 Gitaly 服务器的地址。您必须将主机名或 IP 地址作为证书的主题备用名称添加。
- 您可以同时使用未加密的监听地址
listen_addr
和加密的监听地址tls_listen_addr
配置 Gitaly 服务器。这允许您在必要时逐步从未加密流量过渡到加密流量。 - 证书的公共名称字段被忽略。
使用 TLS 配置 Gitaly
{{< history >}}
- 极狐GitLab 17.11 中引入了最小 TLS 版本配置选项。
{{< /history >}}
在配置 TLS 支持之前,配置 Gitaly。
配置 TLS 支持的过程取决于您的安装类型。
{{< tabs >}}
{{< tab title=”Linux package (Omnibus)” >}}
- 为 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', ## Optionally configure the minimum TLS version Gitaly offers to clients. ## ## Default: "TLS 1.2" ## Options: ["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。
- 通过注释或删除
{{< /tab >}}
{{< tab title=”Self-compiled (source)” >}}
- 为 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
如下:gitlab: repositories: storages: default: gitaly_address: tls://gitaly1.internal:9999 path: /some/local/path storage1: gitaly_address: tls://gitaly1.internal:9999 path: /some/local/path storage2: gitaly_address: tls://gitaly2.internal:9999 path: /some/local/path
{{< alert type=”note” >}}
/some/local/path
应设置为存在的本地文件夹,但该文件夹中不存储数据。{{< /alert >}}
- 保存文件并重启极狐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。
- 通过注释或删除
{{< /tab >}}
{{< /tabs >}}
更新证书
在初始配置后更新 Gitaly 证书:
{{< tabs >}}
{{< tab title=”Linux package (Omnibus)” >}}
如果 /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
{{< /tab >}}
{{< tab title=”Self-compiled (source)” >}}
如果 /etc/gitlab/ssl
目录下的 SSL 证书内容已更新,您必须重启极狐GitLab,以便证书由 Gitaly 进程加载。
如果您更改或更新 /usr/local/share/ca-certificates
中的证书,您必须:
- 运行
sudo update-ca-certificates
以更新系统的信任存储。 - 重启极狐GitLab,以便证书由 Gitaly 进程加载。
{{< /tab >}}
{{< /tabs >}}
观察 Gitaly 连接的类型
有关观察提供的 Gitaly 连接类型的信息,请参阅相关文档。