SSL 更新の基本 — Let's Encrypt 自動更新を失敗させないために
最終更新: 2026-04-24 · 所要 8 分
結論
- 自動更新は信じすぎず、別チャネル(メール監視)で期限を見張る
- Caddy は自動更新が標準、Nginx + certbot は設定を理解して運用
- 期限 30 日 / 14 日 / 7 日 / 1 日前に通知するセーフティネットを用意
どういう場面で必要か
Let's Encrypt の期限が迫って、気づいたら切れていた / 切れかけていた時。あるいは監視を組んで事故を予防したい時。
実務で見るポイント
- Caddy なら Caddyfile に `yoursite.com { ... }` と書くだけで SSL 取得 + 自動更新
- Nginx + certbot なら /etc/cron.d/certbot か systemd timer(certbot.timer)で週 2 回自動更新
- Ports 80/443 が certbot 更新時に到達可能であること(CDN 前段だと HTTP-01 がブロックされる可能性)
- 証明書は 90 日有効。更新は期限 30 日前から開始される
- DNS-01 チャレンジは wildcard 証明書に必須、Cloudflare API 等の自動化が定番
よくある失敗
- nginx の graceful reload 忘れで新証明書が反映されない
- certbot --webroot のパス不一致で更新失敗
- CDN(Cloudflare フル HTTPS モード等)経由で HTTP-01 が通らない
- Rate limit(Let's Encrypt の 50 certs/week/domain)に引っかかる
- systemd timer が OnCalendar のまま Exec しないパターン(journalctl 確認)
チェックリスト
- [ ] certbot renew --dry-run が成功する
- [ ] systemctl list-timers で certbot.timer が次回実行予定を持っている
- [ ] Caddy の場合、reload 後の journalctl に certificate obtained ログが出る
- [ ] SSL 期限監視に登録済み(Infra Ops Hub Monitor 推奨)
- [ ] /tools/ssl-check で残日数・発行元を確認
- [ ] Site Health Check の SSL カテゴリが A 以上
よくある質問
3 か月ごとの更新は手動でもできる?
可能ですが推奨しません。人手運用は忘れるリスクが高く、特に副業個人では「ドメイン + SSL + レジストラ課金」の 3 重監視が事故抑止に有効です。
Cloudflare の Free SSL と Let's Encrypt どちらが良い?
運用負担は Cloudflare の方が低いですが、オリジンサーバーの TLS 設定は別途必要(Full/Strict モード)。Let's Encrypt は自動更新の堅牢性、Cloudflare は DNS + CDN + SSL 統合が利点。
更新に失敗したらどう検知する?
cron 出力をメールに飛ばす、Infra Ops Hub Monitor で SSL 期限監視を設定、導入済みのエラー・ログ基盤にも記録する、の 3 層で冗長化するのが安心です。
DNS-01 challenge に切り替えたい時の手順は?
Cloudflare API トークンを取得し、certbot-dns-cloudflare プラグインを導入。/etc/letsencrypt/dns-cloudflare.ini に credentials を配置後、certbot --preferred-challenges dns で発行。