Infra Ops Hub

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 で発行。

関連ツール・比較・ガイド