S/MIMEによる送信メールの署名

GitLabから送信される通知メールには、セキュリティを向上させるためにS/MIMEで署名することができます。

S/MIME証明書とTLS/SSL証明書は同じではなく、異なる目的で使用されることに注意してください:TLSはセキュリティチャンネルを作るのに対し、S/MIMEはメッセージ自体に署名したり暗号化したりします。

S/MIME署名を有効にします

この設定は明示的に有効にし、鍵と証明書のペアのファイルを1つ提供する必要があります:

  • どちらのファイルも PEM エンコードされている必要があります。
  • GitLabがユーザーの介入なしに読み込めるように、鍵ファイルは暗号化されていないものでなければなりません。
  • RSA鍵のみがサポートされています。

オプションとして、各署名に含まれるCA証明書のバンドル(PEMエンコード)を提供することもできます。これは通常、中間CAです。

caution
秘密鍵のアクセス・レベルと第三者への可視性に注意してください。

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 (i.e. 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 (i.e. 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 拡張子) で扱われ、1 つの暗号化されたファイルに以下の内容が含まれます:

  • 公開証明書
  • 中間証明書(ある場合)
  • 秘密鍵

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