管理群组 SSH 证书

  • Tier: 专业版, 旗舰版
  • Offering: JihuLab.com

您可以使用 SSH 证书控制和管理对项目和群组的 Git 访问。

SSH 证书是加密签名的文档,用于验证用户的身份和权限。它们由受信任的证书颁发机构 (CA) 签发,包含用户身份、有效期和权限等信息。

SSH 证书认证的好处有:

  • 集中访问控制:您可以通过中央 CA 管理访问,而不是每个用户自己管理的 SSH 密钥。
  • 增强的安全性:SSH 证书比传统的 SSH 密钥更安全。
  • 时间限制访问:您可以设置证书在特定时间后过期。
  • 简化的凭证管理:组织可以维护一个批准的 SSH 证书凭证列表以供存储库访问。
  • 独立于用户管理的凭证:访问由群组管理的证书控制,而不是用户个人的公用 SSH 密钥。

SSH 证书和 SSH 密钥#

下表比较了 SSH 证书和 SSH 密钥:

功能SSH 证书SSH 密钥
访问控制通过群组管理的 CA 集中管理。分布在各个用户账户。
过期内置过期机制。无内置过期机制。
凭证管理由群组所有者管理。由个人用户管理。
设置复杂性初始设置较为复杂。初始设置较简单。

认证流程#

下图说明了在极狐GitLab 中 SSH 证书认证的工作原理,从请求证书到访问存储库:

Rendering chart...

认证过程会在允许存储库访问之前验证用户是否拥有有效的 SSH 证书。

添加 CA 证书到顶级群组#

History
    • 引入于极狐GitLab 16.4,使用名为 ssh_certificates_rest_endpoints功能标志。默认禁用。
    • 在极狐GitLab 16.9 中为 JihuLab.com 启用。
    • 在极狐GitLab 17.7 中 GA。功能标志 ssh_certificates_rest_endpoints 被移除。

先决条件:

  • 您必须拥有该群组的所有者角色。
  • 该群组必须是顶级群组,而不是子群组。

要将 CA 证书添加到群组:

  1. 生成一个 SSH 密钥对,用作证书颁发机构文件:

    plaintext
    ssh-keygen -f CA
  2. 使用群组 SSH 证书 API 将公钥添加到顶级群组,以授予对该群组及其子群组项目的访问权限。

为用户签发 CA 证书#

先决条件:

  • 您必须拥有该群组的所有者角色。
  • 用户证书只能用于访问顶级群组及其子群组中的项目。
  • 必须指定用户的用户名或主要电子邮件(useruser@example.com)以将极狐GitLab 用户与用户证书关联。
  • 用户必须是 企业用户

要为用户签发证书,请使用您先前创建的密钥对中的私钥:

shell
ssh-keygen -s CA -I user@example.com -V +1d user-key.pub

(user-key.pub) 密钥是用户用于 SSH 认证的 SSH 密钥对中的公钥。SSH 密钥对由用户生成或由群组所有者基础设施与 SSH 证书一起提供。

过期日期 (+1d) 确定 SSH 证书可以用于访问群组项目的时间长度。

用户证书只能用于访问顶级群组中的项目。

强制使用 SSH 证书#

History
    • 引入于极狐GitLab 16.7,使用名为 enforce_ssh_certificates_via_settings功能标志。默认禁用。
    • 在极狐GitLab 16.9 中为 JihuLab.com 启用。
    • 在极狐GitLab 17.7 中 GA。功能标志 enforce_ssh_certificates_via_settings 被移除。

您可以强制使用 SSH 证书,并限制用户使用 SSH 密钥和访问令牌进行认证。

当强制使用 SSH 证书时:

  • 仅影响个人用户账户。
  • 不适用于服务账户、部署密钥和其他类型的内部账户。
  • 只有群组所有者添加的 SSH 证书用于认证存储库访问。
强制使用 SSH 证书会禁用常规用户的 HTTPS 访问。

先决条件:

  • 您必须拥有该群组的所有者角色。

要强制使用 SSH 证书:

  1. 在左侧边栏中,选择 搜索或前往 并找到您的群组。
  2. 选择 设置 > 常规
  3. 展开 权限和群组功能 部分。
  4. 选中 强制使用 SSH 证书 复选框。
  5. 选择 保存更改