HTTPS 対応サイトを運用していると、「証明書が増えてきた」「更新テストをしたい」「自動更新の設定が合っているか不安」といった場面が定期的にやってくる。
この記事では、Certbot の日常運用でよく使う操作を一か所にまとめた。セットアップ手順ではなく、運用フェーズで実際に使うコマンドと設定に絞っている。
1. 証明書の確認・削除 #
まず現状把握から。取得済みの証明書は一覧で確認できる。
sudo certbot certificates有効期限・ドメイン・証明書名が表示されるので、不要なものがあれば削除する。
# 対話形式で選択
sudo certbot delete
# 証明書名を直接指定
sudo certbot delete --cert-name example.com削除すると /etc/letsencrypt/live/・archive/・renewal/ 配下のファイルが一括で消え、自動更新の対象からも外れる。
2. dry-run で事前テスト #
証明書の取得・更新に失敗し続けると Let’s Encrypt のレート制限に引っかかる。本番実行の前に dry-run でテストしておくのが鉄則だ。
dry-run ではステージング環境が使われるため、レート制限の心配なく何度でも試せる。
新規取得のテスト #
sudo certbot certonly --dry-run --webroot \
-w /var/www/acme-challenge \
-d example.com既存証明書の更新テスト(推奨) #
既存の .conf 設定(authenticator = webroot など)を読み込んで実行される。
sudo certbot renew --dry-run --cert-name example.com注意:
certbot certonly --dry-runは新規取得扱いのため.confを参照しない。更新のテストには必ずcertbot renew --dry-runを使うこと。
3. Apache ポート 80 の設定(ACME challenge 専用) #
webroot 認証を使う場合、ポート 80 を Let’s Encrypt の認証専用にして、それ以外のアクセスは HTTPS にリダイレクトする構成が扱いやすい。
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com blog.example.com
DocumentRoot /var/www/acme-challenge
<Directory /var/www/acme-challenge>
Options -Indexes
AllowOverride None
Require all granted
</Directory>
RewriteEngine On
# ACME challenge はそのまま通す
RewriteRule ^/\.well-known/acme-challenge/ - [L]
# それ以外は HTTPS にリダイレクト
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
ErrorLog ${APACHE_LOG_DIR}/acme-challenge-error.log
CustomLog ${APACHE_LOG_DIR}/acme-challenge-access.log combined
</VirtualHost>設定のポイント:
ServerAliasにサブドメインをまとめて記載する- certbot の
webroot-pathとDocumentRootを一致させる /.well-known/acme-challenge/ディレクトリを事前に作成しておく
sudo mkdir -p /var/www/acme-challenge/.well-known/acme-challenge
sudo chown -R www-data:www-data /var/www/acme-challenge4. 自動更新を crontab に設定 #
まず systemd timer を確認する(Ubuntu/Debian) #
certbot をパッケージインストールした場合、certbot.timer が既に動いていることが多い。二重実行を避けるため、先に確認する。
systemctl status certbot.timertimer が有効(active (waiting))であれば、crontab の追加設定は不要だ。
crontab に登録する場合 #
timer が無効だった場合や、明示的に cron で管理したい場合は以下を登録する。
sudo crontab -e# Let's Encrypt 証明書の自動更新(1日1回)
# 実際に更新されたときだけ Apache をリロード
30 3 * * * certbot renew --quiet --deploy-hook "systemctl reload apache2" >> /var/log/certbot-renew.log 2>&1--deploy-hook を使うと、証明書が実際に更新されたときだけ Apache がリロードされる。
5. 設定変更後の必須コマンド #
VirtualHost の設定を変更したら、必ず構文チェックを挟んでからリロードする。
# 構文チェック(エラーがあれば反映前に気づける)
sudo apachectl configtest
# 問題なければ Apache リロード
sudo systemctl reload apache2configtest で Syntax OK が出ることを確認してから reload するクセをつけておくと、ミスによるサービス停止を防げる。
まとめ #
| やりたいこと | コマンド |
|---|---|
| 証明書一覧を確認 | certbot certificates |
| 証明書を削除 | certbot delete --cert-name <name> |
| 更新のテスト | certbot renew --dry-run --cert-name <name> |
| 自動更新の確認 | systemctl status certbot.timer |
| Apache 構文チェック | apachectl configtest |
Certbot は一度設定してしまうと普段あまり触らないが、いざというときにコマンドを探し回るのは避けたい。このチートシートが手元にあれば、運用時の迷いを減らせるはずだ。