{{< details >}}

  • Tier: 基础版,专业版,旗舰版
  • Offering: 私有化部署

{{< /details >}}

极狐GitLab 发送的通知邮件可以使用 S/MIME 签名以提高安全性。

请注意,S/MIME 证书和 TLS/SSL 证书不是同一种东西,用于不同的目的:TLS 创建一个安全的通道,而 S/MIME 签名和/或加密消息本身。

启用 S/MIME 签名

此设置必须明确启用,并且必须提供一对密钥和证书文件:

  • 两个文件都必须是 PEM 编码的。
  • 密钥文件必须是未加密的,以便极狐GitLab 可以在无需用户干预的情况下读取它。
  • 仅支持 RSA 密钥。

您还可以选择提供一个 CA 证书包(PEM 编码)以包含在每个签名中。通常这是一个中级 CA。

{{< alert type=”warning” >}}

注意您私钥的访问级别和第三方的可见性。

{{< /alert >}}

对于 Linux 软件包安装:

  1. 编辑 /etc/gitlab/gitlab.rb 并调整文件路径:

    gitlab_rails['gitlab_email_smime_enabled'] = true
    gitlab_rails['gitlab_email_smime_key_file'] = '/etc/gitlab/ssl/gitlab_smime.key'
    gitlab_rails['gitlab_email_smime_cert_file'] = '/etc/gitlab/ssl/gitlab_smime.crt'
    # Optional
    gitlab_rails['gitlab_email_smime_ca_certs_file'] = '/etc/gitlab/ssl/gitlab_smime_cas.crt'
    
  2. 保存文件并重新配置极狐GitLab以使更改生效。

密钥必须由极狐GitLab 系统用户(默认为 git)可读。

对于自编译安装:

  1. 编辑 config/gitlab.yml

    email_smime:
      # Uncomment and set to true if you need to enable email S/MIME signing (default: false)
      enabled: true
      # S/MIME private key file in PEM format, unencrypted
      # Default is '.gitlab_smime_key' relative to Rails.root (the root of the GitLab app).
      key_file: /etc/pki/smime/private/gitlab.key
      # S/MIME public certificate key in PEM format, will be attached to signed messages
      # Default is '.gitlab_smime_cert' relative to Rails.root (the root of the GitLab app).
      cert_file: /etc/pki/smime/certs/gitlab.crt
      # S/MIME extra CA public certificates in PEM format, will be attached to signed messages
      # Optional
      ca_certs_file: /etc/pki/smime/certs/gitlab_cas.crt
    
  2. 保存文件并重新启动极狐GitLab以使更改生效。

密钥必须由极狐GitLab 系统用户(默认为 git)可读。

如何将 S/MIME PKCS #12 格式转换为 PEM 编码

通常,S/MIME 证书以二进制公钥加密标准 (PKCS) #12 格式处理(.pfx.p12 扩展名),该格式在单个加密文件中包含以下内容:

  • 公共证书
  • 中级证书(如果有)
  • 私钥

要从 PKCS #12 文件中导出所需的 PEM 编码文件,可以使用 openssl 命令:

#-- Extract private key in PEM encoding (no password, unencrypted)
$ openssl pkcs12 -in gitlab.p12 -nocerts -nodes -out gitlab.key

#-- Extract certificates in PEM encoding (full certs chain including CA)
$ openssl pkcs12 -in gitlab.p12 -nokeys -out gitlab.crt