見出し画像

SSL証明書期限切れでWebが停止『Web/DBの話⑥』

ある日突然、ブラウザに赤い警告。
APIは全滅、ユーザーはログイン不能。
原因はSSL証明書の期限切れ
設定は正しいのに、更新を忘れただけで“事実上のサービス停止” になる、定番かつ致命的な事故だ。


冒頭の一言要約

SSLは“期限付き”。
切れた瞬間、Webは信頼を失い止まる。


症状(あるある)

  • ブラウザで「この接続ではプライバシーが保護されません」

  • HTTPSアクセスが拒否される

  • APIクライアントが証明書エラーで失敗

  • 監視はHTTP 200なのに、実利用は不可

  • 更新した“つもり”でも反映されていない

  • 特定ドメインだけ突然死


原因と仕組み(なぜ起きるか)

  • 証明書の有効期限管理をしていない

  • 自動更新(Let’s Encrypt等)が途中で失敗

  • 中間証明書(chain)不備で検証失敗

  • 複数vhostの一部だけ更新漏れ

  • LB/リバースプロキシ配下で 片系だけ更新

  • 再読み込み(reload)忘れで古い証明書を掴み続ける


図:期限切れは“即ブロック”になる

[クライアント]
      │ HTTPS
      ▼
[Webサーバ]
  ├─ 証明書 有効 → 通信OK
  └─ 証明書 期限切れ → 通信拒否

切り分け(最短コース)

  1. 証明書の有効期限確認

    1. openssl s_client -connect example.com:443 -servername example.com | openssl x509 -noout -dates

  2. Webサーバが使っている証明書の実体確認

    • Apache/Nginx の ssl_certificate / SSLCertificateFile

  3. 中間証明書の有無確認

    • フルチェーン指定になっているか

  4. 反映確認

    1. systemctl reload nginx systemctl reload httpd

  5. LB/多段構成の確認

    • どこでSSL終端しているか


今すぐ効く対処(テンプレ)

◆ 手動更新(例)

  • 新証明書を配置

  • 設定ファイルでパス更新

  • reload 実行

◆ Let’s Encrypt(例)

certbot renew

反映:

systemctl reload nginx

◆ 中間証明書(フルチェーン)指定(Nginx例)

ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

恒久対策/再発防止チェックリスト

  • 証明書の有効期限を監視(30日/14日前アラート)

  • 自動更新の成否をログ・監視で確認

  • reload まで含めた更新手順を自動化

  • LB/多段構成の更新対象を明確化

  • フルチェーン指定を標準化

  • vhost 追加時に証明書管理をセットで実施

  • 手動更新でも期限管理表を運用

  • 失効・更新時の確認コマンドを手順書化


落とし穴(やりがちミス)

  • 自動更新を“設定しただけ”で安心

  • reload 忘れで古い証明書を使い続ける

  • 中間証明書不足で一部環境のみ失敗

  • 監視がHTTPのみでHTTPS未監視

  • 片系更新漏れ(冗長構成)


まとめ(行動指針)

SSL証明書は
「更新できるか」より「期限を管理できるか」 が重要。

期限監視 → 自動更新 → 反映確認。
この3点を仕組みに落とせば、
SSL期限切れによるWeb停止は確実に防げる。

いいなと思ったら応援しよう!