はじめに
UPKI電子証明書発行サービスのACMEプロトコルを自サーバで運用しているGitLabから利用する。なお、すでにACMEプロトコル認証情報(EAB)を取得しているとする。また、GitLabは稼働済みとする。
関連
環境
- Debian GNU/Linux 13.5
- gitlab-ce 19.0.2 (APTでインストール)
運用環境
サーバ名がwww.hogehoge.jp であるとき、https://www.hogehoge.jp/ にアクセスすると https://www.hogehoge.jp/users/sign_in にリダイレクトされる設定になっている。
certbotのインストール
snapdのインストール
% sudo apt update % sudo apt install snapd -y
certbotのインストール
sudo snap install --classic certbot sudo ln -s /snap/bin/certbot /usr/bin/certbot certbot --version
HTTP-01用のディレクトリの作成
% sudo mkdir -p /var/acme/.well-known/acme-challenge % sudo touch /var/acme/.well-known/acme-challenge/index.html % cd /var/acme/ % sudo chown -R gitlab-www:gitlab-www .well-known
/etc/gitlab/gitlab.rb の編集
アクセス制限のかかったGitLabにLet's Encryptをつかってhttps化する · GitHubを参考にした。
% cd /etc/gitlab % sudo cp -p gitlab.rb gitlab.rb.YYYYMMDD (注:YYYYMMDDは西暦日付8桁表示)
gitlab.rb の以下の該当部分を変更する。
# httpでアクセスしたときにhttpsへリダイレクトする設定をオフにする。 nginx['redirect_http_to_https'] = false # 追加設定用のファイルを読み込めるようにする nginx['custom_nginx_config'] = "include /etc/gitlab/custom_nginx_config.conf;" # GitLab標準の証明書更新機能をオフにする letsencrypt['enable'] = false
追加設定用のファイルを作成する。
% sudo touch /etc/gitlab/custom_nginx_config.conf
custom_nginx_config.confの中身を以下のようにする。
server {
listen 80;
server_name _;
access_log /var/log/gitlab/nginx/access.log;
error_log /var/log/gitlab/nginx/error.log;
location / {
return 404;
}
location /.well-known {
alias /var/acme/.well-known;
}
}変更した設定を反映させる。
% sudo gitlab-ctl reconfigure % sudo gitlab-ctl restart nginx
サーバ証明書の取得
取得したEABに記載されているACMEアカウント登録コマンドを実行する。コマンドの説明は4-1-1. 証明書発行を参照のこと。
% sudo certbot register --debug -vvv --server 'https://secomtrust-acme.com/acme/' --eab-kid xxxxxxxxxxxx --eab-hmac-key xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --agree-tos -m email@example.com --no-eff-email
続いてサーバ証明書を取得する。なお、以下のコマンドでは鍵のタイプとして ECDSAを用いている。これはEAB取得時に選択した鍵タイプを選ぶこと(RSAかECDSA)。
% sudo certbot certonly --webroot -w /var/acme -d www.hogehoge.jp --key-type ecdsa --server 'https://secomtrust-acme.com/acme/'
サーバ証明書の取得に成功すると証明書と秘密鍵が以下のようなファイル名で設置される。
- 証明書:/etc/letsencrypt/live/www.hogehoge.jp/fullchain.pem
- 秘密鍵:/etc/letsencrypt/live/www.hogehoge.jp/privkey.pem
取得したサーバ証明書を使用するように/etc/gitlab.rbを編集する。編集箇所は以下の通り。
nginx['ssl_certificate'] = "/etc/letsencrypt/live/www.hogehoge.jp/fullchain.pem" nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/www.hogehoge.jp/privkey.pem"
/etc/gitlab.rbを反映させる。
% sudo gitlab-ctl reconfigure
サーバ証明書更新時のdeploy-hookの設定
snapでcertbotをインストールしたため、systemd timerで自動更新される。その際に更新された証明書を反映させるdeploy-hookを準備する。詳しくは 4-1-1. 証明書発行の「自動更新について」を参照のこと。
% cd /etc/letsencrypt/renewal-hooks/deploy % sudo touch restart-services.sh % sudo chmod 755 restart-services.sh
restart-services.shの中身を以下のように編集する。
#!/usr/bin/bash gitlab-ctl reconfigure