WebサイトのHTTPS化に欠かせない、無料のSSL/TLS証明書「Let’s Encrypt」。そして、その発行や更新を自動化してくれる便利なツールが「Certbot」です。
しかし、テスト用に取得したドメインや、使わなくなったサブドメインの証明書がサーバー内にどんどん溜まっていませんか?「とりあえず放置」していると、更新エラーの通知が鳴り止まなくなったり、管理が煩雑になったりと良いことはありません。
今回は、Certbotを使ったSSL証明書の「新規追加」「更新」、そして意外と見落としがちな「不要な証明書の完全削除」まで、ライフサイクルを通したメンテナンスの全手順を分かりやすく解説します!ApacheとNginxそれぞれの反映方法も網羅していますので、ぜひ参考にしてください。
1. 証明書の新規追加(発行)
まずは新しいドメインの証明書を取得する手順です。Webサーバーを稼働させたまま証明書を取得できる「Webrootプラグイン」を使用するのが、現在のベストプラクティスです。
コマンドの実行
sudo certbot certonly --webroot -w /var/www/html -d example.com -d www.example.com
-w: Webサイトのドキュメントルート(公開ディレクトリ)を指定します。-d: 取得したいドメインを指定します。複数指定も可能です。
無事に発行されると、/etc/letsencrypt/live/example.com/ の中に fullchain.pem(証明書)と privkey.pem(秘密鍵)のショートカットが作成されます。
Webサーバーへの反映(Apacheの場合)
Apacheの設定ファイル(例: /etc/apache2/sites-available/example.com.conf など)を開き、ポート443用のVirtualHost設定を追加します。
<VirtualHost *:443>
ServerName example.com
DocumentRoot /var/www/html
SSLEngine on
# 発行された証明書と秘密鍵のパスを指定
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
# (その他のディレクトリ設定やログ設定などを記述)
</VirtualHost>
設定後、構文チェックと再起動を行います。
sudo apachectl configtest
sudo systemctl reload apache2
Webサーバーへの反映(Nginxの場合)
Nginxの設定ファイル(例: /etc/nginx/sites-available/example.com など)を開き、server ブロックにSSLの設定を追記します。
server {
listen 443 ssl;
server_name example.com;
root /var/www/html;
# 発行された証明書と秘密鍵のパスを指定
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# (その他のlocation設定などを記述)
}
設定後、構文チェックと再起動を行います。
sudo nginx -t
sudo systemctl reload nginx
2. 証明書の更新(メンテナンス)
Let’s Encryptの証明書の有効期限は90日間です。有効期限が30日を切ると更新が可能になります。
手動での更新テスト(Dry Run)
本当に更新が成功するか、シミュレーションを行うことができます。エラーが出ないか定期的に確認するのにおすすめです。
sudo certbot renew --dry-run
自動更新の仕組み
Certbotをパッケージマネージャー(aptなど)でインストールした場合、自動的に1日2回、更新が必要な証明書がないかチェックするタイマー(systemd timer または cron)が設定されます。
更新が成功した際に、自動でWebサーバーを再起動(リロード)させて新しい証明書を読み込ませるには、証明書の発行時や更新時にフックを設定しておく必要があります。
# Apacheの場合のフック設定付き更新テスト
sudo certbot renew --dry-run --deploy-hook "systemctl reload apache2"
# Nginxの場合のフック設定付き更新テスト
sudo certbot renew --dry-run --deploy-hook "systemctl reload nginx"
3. 不要なSSLの「完全削除」(ここが重要!)
使わなくなったドメインの証明書を /etc/letsencrypt/live/ から rm コマンドで直接削除していませんか? これは絶対にNGです。 Certbotの管理ファイルに不整合が起き、その後の更新処理全体に悪影響を及ぼす可能性があります。
正しい削除手順は以下の2ステップです。
ステップ1:Certbotのコマンドで安全に削除する
Certbotの delete コマンドを使用することで、関連する設定ファイルも含めて綺麗に削除してくれます。
方法A:対話モードで選ぶ(おすすめ)
sudo certbot delete
これを実行すると、現在管理されているドメインのリストが番号付きで表示されます。削除したいドメインの番号を入力してEnterを押すだけです。
方法B:ドメイン名を直接指定する
sudo certbot delete --cert-name example.com
ステップ2:Webサーバーの設定から該当ドメインを消す【要注意】
Certbot側で証明書を削除した後、必ずApacheやNginxの設定ファイルからも、そのドメイン用の設定(VirtualHostやserverブロック)を削除、または無効化してください。
もし設定ファイルに SSLCertificateFile /etc/letsencrypt/... の記述が残ったままWebサーバーを再起動すると、「証明書ファイルが見つからない!」という致命的なエラーになり、Webサーバー自体が起動しなくなってしまいます(他の正常なサイトも道連れで落ちます)。
- Apache/Nginxの設定ファイルから該当ドメインの記述を削除・コメントアウト。
sudo apachectl configtestまたはsudo nginx -tで構文チェック。sudo systemctl reload apache2またはsudo systemctl reload nginxで反映。
まとめ
Certbotは非常に優秀なツールですが、ライフサイクルを理解して運用することで、より安全で確実なインフラ環境を保つことができます。
- 追加:
certonly --webrootで安全に発行。 - 更新:
renew --dry-runでテストし、フックでWebサーバーをリロード。 - 削除: 必ず
certbot deleteコマンドを使い、Webサーバー側の設定ファイルも忘れずに掃除する。
コメント