SSL証明書の期限切れは予測できる:クライアントのサイトで見逃さない方法

· · AIで下書き作成、Pavol Bincikが確認済み · 記事の作成方針

要約

証明書には有効期限が記載されているため、期限切れは予期せぬ出来事ではなく、運用プロセスの失敗です。それでも自動更新は失敗します。サイトのホスティング移転、DNSの変更、更新ジョブの停止などが原因です。2026年3月15日以降、公開証明書の有効期間は最長200日となり、2029年には47日まで短縮されます。さらにLet's Encryptは2025年6月に有効期限通知メールの送信を終了しました。証明書はopensslコマンド1つで確認できます。多数のサイトを管理しているなら、モニターに毎日有効期限を読み取らせ、30日前、14日前、7日前、1日前に警告を受け取りましょう。Baromioはまさにそれを行います。1つの拠点から有効期限と発行者を読み取り、証明書チェーンや暗号スイートはチェックしません。

ほとんどの障害は前触れなく起こります。証明書の期限切れは違います。有効期限は証明書そのものに、何か月も前から書き込まれています。その日を過ぎると、ブラウザはサイトの代わりに全画面のセキュリティ警告を表示します。

それでも、本来なら防げるはずのチームでも起こります。2020年2月3日、認証用の証明書が期限切れになったため、Microsoft Teamsが数時間にわたってダウンしました。これは当時Microsoftが認めています。

クライアントのサイトで証明書が今も期限切れになる理由

現在、ほとんどのクライアントサイトは、自動で更新される無料の証明書を使っています。失敗するのは更新の部分で、しかも気づかれないまま失敗します。よくある原因は次のとおりです。

  • サイトが移転した。 DNSは新しいホストやCDNを指しているのに、古いサーバーが更新を試み続けている、あるいは新しいサーバーで更新が設定されていない。
  • 更新ジョブが止まった。 サーバーのアップデート、PHPバージョンの変更、ディスクの容量不足などをきっかけに、cronジョブやACMEクライアントが動かなくなる。
  • 更新は成功したが、サーバーが再読み込みしていない。 新しい証明書はディスク上にあるのに、Webサーバーは古い証明書を配信し続けている。
  • 誰かが手動で購入した。 クライアントの以前の制作会社やクライアント自身のアカウントで購入した有料証明書で、覚えている人が更新している。
  • 誰も把握していないホスト名。 wwwとwwwなしのドメイン、ショップ用のサブドメイン、ステージングサイトなど、それぞれが独自の証明書を持つ場合があります。

次の2つの変化により、この問題は減るどころか起こりやすくなっています。

  • Let's Encryptは2025年6月4日に、有効期限のリマインダーメールの送信を終了しました。 更新が失敗しても、監視していなければ誰も知らせてくれません。
  • 証明書の有効期間は短くなっています。 CA/Browser Forumの投票SC-081により、公開TLS証明書の有効期間は、2026年3月15日以降に発行されるものは最長200日、2027年3月15日以降は100日、2029年3月15日以降は47日になります。Let's Encryptの証明書はすでにデフォルトで90日間有効で、60日ごとの更新が推奨されています。今日購入した証明書はもう1年間は使えないため、手動更新の頻度は少なくとも2倍になります。

証明書を手動で確認する

1つのサイトについて、次のコマンドで有効期限と発行者が表示されます。

echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -enddate -issuer

-servernameは重要です。複数のサイトをホストしているサーバーは、名前によって証明書を選ぶからです。www.example.comや、クライアントが使っているすべてのサブドメインについても実行してください。ブラウザでは、アドレスの左にあるアイコンをクリックし、証明書の詳細を開きます。

デフォルトの90日サイクルで運用しているLet's Encrypt証明書には、役立つ目安があります。更新は残り約30日の時点で行われるはずです。残りが14日になっている証明書は、更新がすでに失敗している可能性が高いと考えてください。7日前の警告を待ってはいけません。

実際に対応につながる警告にする

30日前の警告は無視されがちで、他のすべての通知と同じチャネルに届く警告は埋もれてしまいます。次の2つの習慣が役立ちます。

  • 段階ごとに扱いを変える。30日前の警告は更新設定を確認するためのメモ、7日前と1日前の警告はその日のうちに直すべきものです。
  • 直前の警告は、忙しい共有チャネルではなく、毎日必ず目を通す場所に送る。

Baromioがチェックする内容

  • 読み取る内容: 1日1回、および有効にしてから間もなく、Baromioはモニターのホストのポート443(またはURLで指定されたポート)に接続し、証明書の有効期限と発行者を読み取ります。モニターページには発行者と「(日付)まで有効」が残り日数とともに表示され、モニターカードには同じ日数がSSLバッジとして表示されます。
  • 警告のタイミング: 残り30日、14日、7日、1日の時点と、証明書の期限が切れたときに1回です。各段階の警告は1回だけで、メールと、接続済みのSlack、Discord、Webhookの各チャネルに送られます(TelegramはProプランとBusinessプランで利用可能)。証明書が更新されると、段階はリセットされます。
  • 有効にする場所: https://のURLを持つHTTPモニターまたはキーワードモニターで、新しいモニターを追加または編集からSSL証明書を監視をオンにします。デフォルトではオフで、一括インポートで作成したモニターも同様なので、サイトごとにオンにしてください。すべてのプランで利用でき、モニター数はFreeプランで20、Proプランで30(月額9 EUR)、Businessプランで100(月額29 EUR)です。
  • 行わないこと: 証明書チェーンの検証、名前の一致確認、プロトコルバージョンや暗号スイートのテスト、複数の拠点からのチェックは行いません。証明書の更新も一切行いません。更新はご自身またはホスティング事業者が担当します。

クライアントサイト向けの簡単なルーティン

  1. クライアントごとに、すべてのホスト名をリストアップします。wwwなしのドメイン、www、サブドメイン、ステージングです。
  2. HTTPSを配信している各ホスト名に、SSLチェックを有効にしたモニターを設定します。
  3. 自動で更新されるはずの証明書について警告が届いたら、更新が失敗した原因を突き止めます。手動で更新して終わりにしないでください。
  4. サイトを新しいホストやCDNに移転したら、その日のうちに上記のopensslコマンドで証明書を確認します。

出典