Open4

GitLab構築(コンテナ)

珈琲豆珈琲豆

Ubuntu22.04のcloudimageを利用した。

  1. Dockerをインストールする
  2. GitLabをインストールする
  3. 自己署名CAを作成してサーバ証明書を作成する
  4. サーバ証明書を配置してHTTPSを有効にする

Dockerをインストールする

公式の Install using the apt repository をそのまま実施する。

GitLabをインストールする

利用バージョン gitlab/gitlab-ce:16.9.2-ce.0

公式の Install GitLab using Docker Compose を実施する。

  • 定義ファイルは Docker Composeの説明 に今はこちらが推奨とあったので compose.yaml とした。
  • shm_size1024M に増やした。
珈琲豆珈琲豆

自己署名CA作成

ディレクトリ構成

  • ~/CA/
  • ~/CA/ca-openssl.cnf /etc/ssl/openssl.cnf からコピーする
  • ~/CA/CA/ CAのルート
    • private/ CAの秘密鍵置き場
    • newcerts/ 署名したサーバ証明書が自動的に置かれる
    • certs/ openssl.cnfで指定したから作成したけど中身何もない、不要かも
    • crl/ openssl.cnfで指定したから作成したけど中身何もない、不要かも
    • index.txt 署名対象がここに記録される
    • serial 署名対象のシリアル

CA作成

最初は openssl.cnf をコピーせずやっていたので ca-openssl.cnf と openssl.cnf の中身は同じ

cd ~/CA/CA

openssl genrsa 2048 > private/{CAの名前}.key
openssl req -new -key private/{CAの名前}.key -sha256 -out {CAの名前}.csr
openssl x509 -days 1095 -in {CAの名前}.csr -req -signkey private/{CAの名前}.key -out {CAの名前}.pem

touch index.txt
echo 01 > serial

参考にしたもの

珈琲豆珈琲豆

サーバ証明書作成

素のまま作成したらクライアント(ブラウザ)がSANがないことを指摘してきたのでSANを加える

cp /etc/ssl/openssl.cnf gitlab-openssl.cnf
vi gitlab-openssl.cnf

[ v3_req ] の欄に追記する

subjectAltName = @alt_names

[ alt_names ]
DNS.1 = {GitLabのFQDN}

秘密鍵とリクエストを作成する

openssl genrsa 2048 > {GitLabのFQDN}.key
openssl req -new -key {GitLabのFQDN}.key -sha256 -out {GitLabのFQDN}.csr

CAで署名する→そのまま署名したらSANが消えてしまったので ca-openssl.cnf を編集する
[ CA_default ] にある copy_extensions = copy を有効にする

[ CA_default ]
# Extension copying option: use with caution.
copy_extensions = copy

署名する

cd ~/CA
openssl ca -days 1095 -in ../gitlab/{GitLabのFQDN}.csr -out ../gitlab/{GitLabのFQDN}.pem -keyfile CA/private/{CAの名前}.key -cert CA/{CAの名前}.pem

失敗したら失効させて作り直す(index.txtから削除でも行ける気はする)

openssl ca -revoke CA/newcerts/01.pem
珈琲豆珈琲豆

サーバ証明書を配置してHTTPSを有効にする

公式の Configure HTTPS manually に沿って実施する

compose.yaml の GITLAB_OMNIBUS_CONFIG に追記していく

        external_url 'https://{GitLabのFQDN}'
        letsencrypt['enable'] = false
        nginx['redirect_http_to_https'] = true
        mattermost_nginx['redirect_http_to_https'] = true

証明書を (コンテナから見た) /etc/gitlab/ssl に "{GitLabのFQDN}.key", "{GitLabのFQDN}.crt" として配置する (例) /etc/gitlab/ssl/hoge.example.com.key, /etc/gitlab/ssl/hoge.example.com.crt

/etc/gitlab$GITLAB_HOME/config をマウントしているので

cp {GitLabのFQDN}.pem $GITLAB_HOME/config/ssl/{GitLabのFQDN}.crt
cp {GitLabのFQDN}.key $GITLAB_HOME/config/ssl/{GitLabのFQDN}.key

reconfigureする。Update the SSL certificates を参考にnginxの再起動もする。

(コンテナ内で or docker execで)
gitlab-ctl reconfigure
gitlab-ctl hup nginx
gitlab-ctl hup registry

確認

クライアントにCAの証明書をコピーして「信頼されたルート証明機関」にインポートしておく。
ブラウザからGitLabへアクセスしてHTTPSでアクセスできていることを確認する。