Let's Encrypt証明書の自動更新を確実にする完全ガイド【2026年版】
Let's Encrypt SSL証明書の自動更新が失敗する原因と対処法を解説。certbotの設定確認からトラブルシューティングまで網羅。
TL;DR
Let's Encrypt証明書は90日ごとに自動更新が必要です。certbotのタイマーが正しく動作しているか確認し、更新テストを実施、さらに監視ツールで期限をチェックすることで、うっかり失効を防げます。
Let's Encryptの自動更新の仕組み
Let's Encryptは、無料でSSL/TLS証明書を発行できるサービスですが、有効期限は90日間です。certbotを使うと、以下のような仕組みで自動更新されます:
- systemd timerまたはcron: Linuxの定期実行機能で、1日2回certbot renewを実行
- 期限チェック: 証明書の残り有効期限が30日以下なら更新を実施
- Webサーバー再起動: 更新後、Nginx/Apacheを自動的に再起動して新しい証明書を適用
自動更新が失敗する主な原因
1. certbotのタイマーが停止している
systemdのタイマーが無効化されていると、自動更新が実行されません。以下のコマンドで確認しましょう:
sudo systemctl status certbot.timer
「inactive (dead)」と表示される場合は、タイマーが停止しています。以下のコマンドで有効化してください:
sudo systemctl enable certbot.timer
sudo systemctl start certbot.timer
2. Webサーバーの設定が変わっている
証明書を取得した時と現在でWebサーバーの設定が変わっていると、更新に失敗することがあります。特に、.well-known/acme-challengeへのアクセスがブロックされていると更新できません。
Nginxの場合、以下の設定を確認してください:
location /.well-known/acme-challenge/ {
root /var/www/html;
allow all;
}
3. DNS設定が変更されている
DNSのAレコードが変更され、certbotが実行されているサーバーと異なるIPを指している場合、DNS認証やHTTP認証が失敗します。CloudflareのプロキシをONにした場合も注意が必要です。
4. ファイアウォールがHTTP(ポート80)をブロックしている
Let's EncryptのHTTP認証は、ポート80経由で.well-known/acme-challenge/にアクセスします。ファイアウォール(iptables、ufw、AWS Security Groupなど)でポート80が閉じていると更新に失敗します。
自動更新のテスト方法
本番の更新を待たずに、ドライラン(テストモード)で更新が成功するか確認できます:
sudo certbot renew --dry-run
このコマンドは実際に証明書を更新せず、更新プロセスだけをシミュレートします。エラーが出る場合は、上記の原因を確認してください。
更新失敗時のログ確認
certbotのログは、/var/log/letsencrypt/letsencrypt.logに記録されています。更新に失敗した場合、以下のコマンドでログを確認しましょう:
sudo tail -n 50 /var/log/letsencrypt/letsencrypt.log
エラーメッセージから原因を特定できます。
複数ドメインの管理
複数のドメイン・サブドメインで証明書を使っている場合、1つでも更新に失敗すると、そのドメインだけ証明書が切れます。以下のコマンドで全ての証明書の有効期限を一覧表示できます:
sudo certbot certificates
監視ツールで期限をチェック
自動更新を設定していても、万が一のために監視ツールでSSL証明書の有効期限を常時チェックすることをおすすめします。UpGuardianのSSL証明書監視なら、期限切れの30日前・7日前に警告メールを送信します。
Cloudflare経由の証明書更新
CloudflareのプロキシをONにしている場合、HTTP認証がうまくいかないことがあります。以下の2つの対処法があります:
- DNS認証を使う: certbot-dns-cloudflareプラグインを使い、DNS-01チャレンジで証明書を取得・更新
- 一時的にプロキシをOFF: 証明書更新時だけCloudflareのプロキシ(オレンジ雲)をOFFにしてDNS Onlyにする
まとめ
Let's Encryptの自動更新は、certbotのタイマーが正しく動作していれば問題ありません。しかし、サーバー設定の変更やDNS変更で更新に失敗するケースがあります。定期的にcertbot renew --dry-runでテストし、監視ツールで期限をチェックすることで、うっかり失効を防げます。