Gitaly TLS 支持
极狐GitLab 的 Gitaly 支持 TLS 加密。要与监听安全连接的 Gitaly 实例进行通信,请在极狐GitLab 配置中相应存储条目的 gitaly_address
中使用 tls://
URL 方案。
Gitaly 在与极狐GitLab 的 TLS 连接中提供与客户端证书相同的服务器证书。当与验证客户端证书以授予极狐GitLab 访问权限的反向代理(例如 NGINX)结合使用时,这可以用作双向 TLS 认证策略的一部分。
您必须提供自己的证书,因为这不会自动提供。每个 Gitaly 服务器对应的证书必须安装在该 Gitaly 服务器上。
此外,证书(或其证书颁发机构)必须安装在所有:
- Gitaly 服务器。
- 与其通信的 Gitaly 客户端。
如果您使用负载均衡器,则必须能够使用 ALPN TLS 扩展协商 HTTP/2。
证书要求
- 证书必须指定您用来访问 Gitaly 服务器的地址。您必须将主机名或 IP 地址添加为证书的主题备用名称。
- 您可以同时为 Gitaly 服务器配置未加密的监听地址
listen_addr
和加密的监听地址tls_listen_addr
。如果需要,这可以让您逐步从未加密流量过渡到加密流量。 - 证书的通用名称字段被忽略。
使用 TLS 配置 Gitaly
配置 Gitaly 之前,先配置 TLS 支持。
配置 TLS 支持的过程取决于您的安装类型。
::Tabs
:::TabTitle Linux package (Omnibus)
- 为 Gitaly 服务器创建证书。
-
在 Gitaly 客户端上,将证书(或其证书颁发机构)复制到
/etc/gitlab/trusted-certs
:sudo cp cert.pem /etc/gitlab/trusted-certs/
-
在 Gitaly 客户端上,编辑
/etc/gitlab/gitlab.rb
中的git_data_dirs
如下:git_data_dirs({ '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', }, }
- 保存文件并重新配置极狐GitLab。
- 在 Gitaly 客户端(例如 Rails 应用程序)上运行
sudo gitlab-rake gitlab:gitaly:check
以确认它可以连接到 Gitaly 服务器。 - 通过观察 Gitaly 连接类型验证 Gitaly 流量是通过 TLS 提供的。
- 可选。通过以下方式提高安全性:
- 在
/etc/gitlab/gitlab.rb
中注释掉或删除gitaly['configuration'][:listen_addr]
以禁用非 TLS 连接。 - 保存文件。
- 重新配置极狐GitLab。
- 在
:::TabTitle 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
/some/local/path
应设置为存在的本地文件夹,但不会在此文件夹中存储数据。 - 保存文件并重启极狐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。
- 在
::EndTabs
更新证书
在初始配置后更新 Gitaly 证书:
::Tabs
:::TabTitle Linux package (Omnibus)
如果 /etc/gitlab/ssl
目录下的 SSL 证书内容已更新,但未对 /etc/gitlab/gitlab.rb
进行配置更改,则重新配置极狐GitLab 不会影响 Gitaly。相反,您必须手动重新启动 Gitaly 以便证书被 Gitaly 进程加载:
sudo gitlab-ctl restart gitaly
如果在 /etc/gitlab/trusted-certs
中更改或更新了证书而未对 /etc/gitlab/gitlab.rb
文件进行更改,您必须:
- 重新配置极狐GitLab 以更新受信证书的符号链接。
-
手动重新启动 Gitaly 以便证书被 Gitaly 进程加载:
sudo gitlab-ctl restart gitaly
:::TabTitle Self-compiled (source)
如果 /etc/gitlab/ssl
目录下的 SSL 证书内容已更新,您必须重启极狐GitLab 以便证书被 Gitaly 进程加载。
如果在 /usr/local/share/ca-certificates
中更改或更新了证书,您必须:
- 运行
sudo update-ca-certificates
以更新系统的信任存储。 - 重启极狐GitLab 以便证书被 Gitaly 进程加载。
::EndTabs
观察 Gitaly 连接类型
有关观察提供的 Gitaly 连接类型的信息,请参见相关文档。