GitLab構築(コンテナ)
Ubuntu22.04のcloudimageを利用した。
- Dockerをインストールする
- GitLabをインストールする
- 自己署名CAを作成してサーバ証明書を作成する
- サーバ証明書を配置して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_size
を1024M
に増やした。
自己署名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でアクセスできていることを確認する。