はじめに
目的
この文書は、GitLabでSSL(HTTPS)を安全に使うための手順をわかりやすく説明します。基本的な設定方針、証明書の準備、実際の設定手順までを順に扱います。初心者の方でも進められるように具体例を交えて解説します。
対象読者
- 自社でGitLabを運用している管理者
- 社内サーバーにHTTPSを導入したい開発者
- 基本的なLinux操作(sudo、テキスト編集、ファイル転送)ができる方
前提条件
- GitLabが既にインストール済みであること
- 独自ドメイン(例: git.example.com)を使えること
- サーバーに管理者権限でアクセスできること
これらが揃っていれば、本書の手順をそのまま適用できます。
本書の構成
第2章でGitLab側のSSL設定方法を説明します。第3章で証明書の準備(CA発行、自己署名の違いなど)を示します。第4章で具体的なコマンドやファイル配置を順を追って解説します。まずは目的と前提を確認し、次章から設定を始めましょう。
GitLabでのSSL設定方法
概要
GitLabでHTTPSを有効にする基本は、/etc/gitlab/gitlab.rbのexternal_urlをhttpsで指定することです。これだけで多くの場合、内部のNginxがHTTPSを扱うようになります。
手順(基本)
- /etc/gitlab/gitlab.rbを開き、external_url ‘https://git.example.com’ のように設定します。
- 独自証明書を使う場合は /etc/gitlab/ssl/ にドメイン名.crtと.keyを置き、権限を600にします。例: /etc/gitlab/ssl/git.example.com.crt
- HTTPを自動でHTTPSにリダイレクトしたい場合は nginx[‘redirect_http_to_https’] = true を有効にします。
- 設定を反映するために sudo gitlab-ctl reconfigure を実行します。
注意点
- ファイアウォールでTCP 443を開けてください。ブラウザやcurlで接続確認します。
- Let’s Encryptを利用する場合はletsencypt設定を有効にできます(omnibusの設定を参照)。
外部プロキシを使う場合
リバースプロキシでSSL終端するなら、GitLab側はhttpのままにすることが多いです。その場合はexternal_urlをhttpで残し、プロキシ側で証明書を管理してください。
証明書の準備
以下では、GitLabで使うSSL証明書を準備する手順を分かりやすく説明します。
選択肢の確認
-
Let’s Encrypt: GitLab(Omnibus)は自動で証明書を取得・更新できます。手間を減らしたい場合はこちらが便利です。設定は /etc/gitlab/gitlab.rb で有効化します(external_url を https に設定し、letsencrypt[‘enable’] = true など)。
-
カスタム証明書: 企業や既存の証明書を使う場合に選びます。CAから発行された .crt と秘密鍵 .key を用意します。
カスタム証明書を使う手順(簡潔)
- 必要ファイルを用意する
- 証明書ファイル(例: gitlab.example.com.crt)
- 秘密鍵ファイル(例: gitlab.example.com.key)
-
中間証明書が別途ある場合は結合して fullchain を作ると確実です。
-
ファイル名と場所
- /etc/gitlab/ssl/ に配置します。
-
ファイル名はホスト名に合わせると設定が分かりやすいです。
-
所有者とパーミッション設定
- ディレクトリ: sudo mkdir -p /etc/gitlab/ssl && sudo chown root:root /etc/gitlab/ssl
- 証明書: sudo cp your.crt /etc/gitlab/ssl/gitlab.example.com.crt && sudo chmod 644 /etc/gitlab/ssl/*.crt
- 秘密鍵: sudo cp your.key /etc/gitlab/ssl/gitlab.example.com.key && sudo chmod 600 /etc/gitlab/ssl/*.key
-
所有者は root:root にします。
-
GitLabに反映
- ファイル配置後、sudo gitlab-ctl reconfigure を実行します。
- 必要なら sudo gitlab-ctl restart nginx で反映を確認します。
よくあるトラブル
- 権限が厳しすぎる/緩すぎると読み込めません。
- ファイル名がドメインと合っていないと無効になります。
- 中間証明書を含め忘れるとブラウザで未設定表示になります。
証明書はセキュリティの要です。配置と権限を丁寧に確認してください。
設定手順
前提
- GitLab(Omnibus)を使っていること、root権限があること。
- 証明書(公開鍵・秘密鍵)を用意していること。証明書はホスト名と拡張子のみのファイル名にします(例: example.com.crt, example.com.key)。
手順
- external_urlをHTTPSで指定する
-
/etc/gitlab/gitlab.rb を編集し、external_urlを
https://<ホスト名>に設定します。例:external_url "https://example.com"。 -
証明書を配置する
- ディレクトリを作成します:
sudo mkdir -p /etc/gitlab/ssl - 証明書ファイルを配置します(ファイル名はホスト名のみ):
/etc/gitlab/ssl/example.com.crtと/etc/gitlab/ssl/example.com.key - パーミッションを設定します:
sudo chmod 600 /etc/gitlab/ssl/example.com.*、sudo chown root:root /etc/gitlab/ssl/example.com.* -
注意: 証明書ファイルはフルチェーン(中間証明書を含む)を使い、秘密鍵はパスフレーズなしを推奨します。
-
設定反映
-
sudo gitlab-ctl reconfigureを実行します。組み込みのNginxが自動でHTTPS用の設定を作成します。 -
動作確認
- ブラウザで https://<ホスト名> を開くか、
curl -Ik https://example.comで証明書が正しく読み込まれているか確認します。
注意点
- AWSのデフォルトパブリックDNS名ではLet’s Encryptは証明書を発行できないため、独自ドメインが必要です。
- 設定変更後に問題が出たら
sudo gitlab-ctl tailでログを確認してください。












