初心者でもわかるSSLの期限確認方法と重要ポイント

目次

はじめに

ウェブサイトを安全に運営するため、SSL/TLS証明書の有効期限を確認する習慣はとても重要です。本記事は、証明書の期限を確実に確認して更新漏れを防ぐ方法をわかりやすくまとめています。

本記事の目的

ブラウザでの手動チェックから、コマンドライン(OpenSSL、curl)を使った確認方法、さらに定期的に期限を監視して通知する簡単なスクリプト例まで幅広く解説します。実務ですぐ使える手順を中心に説明します。

想定読者

  • ウェブサイトの管理者や開発者
  • サイト運用を担当する方
  • SSL運用を初めて学ぶ方

特別な知識は不要です。ブラウザの基本操作や、ターミナルでコマンドを打つ基本がわかれば読み進められます。

本章の構成

以降の章で、まずなぜ有効期限確認が必要かを説明し、その後に具体的な確認手順(ブラウザ・OpenSSL・curl)と、運用で使える自動チェックの例を紹介します。実際のコマンドやスクリーンショットの例も載せますので、順に進めてください。

なぜSSL証明書の「期限確認」が重要なのか

ブラウザ警告でユーザーの信頼を失う

SSL証明書が期限切れになると、ブラウザが「この接続は安全ではありません」と警告を表示します。ECサイトや会員制サイトでこの表示が出ると、購入や登録を中止される可能性が高くなります。実際に売上や利用率に直結する問題です。

サービス停止や機能障害のリスク

期限切れの証明書は、ウェブだけでなくAPIやメールなど他の通信にも影響します。例えば、外部サービスと連携するAPIが証明書を検証して接続を拒否すると、機能が停止します。業務に支障を与えかねません。

有効期間の短縮と更新の頻度

無料の証明書(例:Let’s Encrypt)は有効期間が短く、通常90日です。これにより手動更新だけでは追いつかないことが増えます。人手で管理すると更新漏れが発生しやすくなります。

複数ドメイン・多数サービスを運用する場合の可視化の重要性

複数ドメインやサブドメイン、マイクロサービスを運用すると、どの証明書がいつ切れるか把握するのが難しくなります。可視化や自動監視を導入すると、期限切れ前に通知を受け取れて安心です。具体例としては次のような対策があります。

  • 期限日を一覧化してカレンダーで管理
  • 自動チェックとメールやチャットでの通知設定
  • 中央管理ツールで一括更新の仕組みを作る

これらを整えることで、ユーザーの信頼維持と安定した運用を両立できます。

ブラウザからSSL証明書の有効期限を確認する方法

最も手軽なのは、ブラウザの鍵(南京錠)アイコンから証明書情報を見る方法です。ここでは基本手順と主要ブラウザでの具体的操作を分かりやすく説明します。

基本手順

  1. 対象サイトをhttpsで開きます。
  2. アドレスバーの鍵アイコンをクリック(またはタップ)します。
  3. 表示されたメニューで「証明書」や「詳細」を選びます。
  4. 証明書の「有効期間」や「有効期限(Not After)」を確認します。

Chrome/Edge(デスクトップ)

  • 鍵をクリック → 「接続は保護されています」などの表示 → 「証明書」を開きます。
  • 証明書のウィンドウで「有効期間: 〇〇から△△まで」といった表記を探してください。

Firefox(デスクトップ)

  • 鍵をクリック → 「接続は保護されています」→ 「さらに詳しく表示」→ 「証明書を表示」で確認できます。

Safari(Mac)

  • 鍵をクリック → 「証明書を表示」を選び、有効期限を確認してください。

スマホブラウザ

  • 多くのモバイルブラウザは詳細表示が限定的です。重要な確認はデスクトップで行うことをおすすめします。

注意点

  • 表示されるのは接続先が提示する証明書の期限です。CDNやプロキシ経由のときは、実際のサーバ証明書と異なる場合があります。
  • 期限切れが近い場合は、早めに更新手続きしてください。

コマンドラインからSSL有効期限を確認する方法(OpenSSL編)

前提と準備

LinuxやMacで使えるopensslを利用します。サーバーにログインする必要はなく、外部から証明書を取得できます。Macではcoreutilsのgdateが必要な場合があります。

基本コマンド

例:

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

出力例:

notBefore=Aug  1 00:00:00 2025 GMT
notAfter=Jul 31 23:59:59 2026 GMT

残日数を確認する(Linuxの例)

enddate=$(echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null \
  | openssl x509 -noout -enddate | cut -d= -f2)
endsec=$(date -d "$enddate" +%s)
nowsec=$(date +%s)
echo $(( (endsec - nowsec) / 86400 ))

Macではdate -dがないためgdateを使ってください。

ポイントと注意点

  • サーバーに直接ログインせずに証明書情報を確認できます。第三者の証明書監視に便利です。
  • 一部サーバーはSNIが必要なので -servername を忘れないでください。
  • opensslのバージョンやロケールで日付書式が変わることがあります。

curlでSSL証明書の有効期限を確認する方法

概要

curlは多くの環境で使えるコマンドです。HTTPS接続時に表示される証明書情報から、有効期限を抽出できます。スクリプト化しやすい点が便利です。

基本的な確認方法

以下は接続先の証明書情報を表示する例です。

curl -v https://example.com 2>&1 | sed -n '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' > cert.pem
openssl x509 -noout -in cert.pem -dates

curlで証明書本体を取り出し、opensslで有効期間を表示します。

–insecureで簡易確認

自己署名や検証エラーを無視して試す場合は次のようにします。

curl --insecure -v https://example.com 2>&1 | sed -n 's/.*expire date: //p'

検証をスキップするため本番運用では注意してください。

–cert-statusでOCSPチェック

OCSPステータスを取得するには次のオプションを使います。

curl --cert-status -v https://example.com

サーバーと証明書にOCSP情報があると、リボケーション(失効)状態の確認に役立ちます。

スクリプト化のポイント

・出力を日時形式に整形して閾値(例:残り30日)でアラートを出すと実用的です。
・ネットワークやプロキシ環境で結果が変わるため、定期実行時は環境を統一してください。

定期的にSSL有効期限をチェックして通知するスクリプト例

概要

curlで接続確認を行い、opensslで証明書の期限を取得する実用例を示します。複数ドメインを定期チェックし、期限が近づいたらメールやWebhookで通知します。

スクリプト例

#!/bin/bash
DOMAINS=(example.com api.example.com)
WARN_DAYS=30
NOW=$(date +%s)
for d in "${DOMAINS[@]}"; do
  # 接続確認
  curl -sS --head https://$d >/dev/null || { echo "$d unreachable"; continue; }
  # 証明書取得
  EXP=$(echo | openssl s_client -servername $d -connect $d:443 2>/dev/null |
    openssl x509 -noout -enddate 2>/dev/null | sed -E 's/notAfter=//')
  EXP_TS=$(date -d "$EXP" +%s)
  DIFF=$(( (EXP_TS - NOW) / 86400 ))
  if [ $DIFF -le $WARN_DAYS ]; then
    # ここで通知(メール・Slack等)
    echo "[WARN] $d expires in $DIFF days ($EXP)"
  fi
done

処理の流れ

  1. curlでサイトの基本応答を確認します。2. opensslで証明書の有効期限を取得します。3. 日数を計算し、閾値を下回れば通知します。

運用のポイント

  • ドメインはファイル化して管理すると追加・削除が楽です。メール送信はsendmailやmailx、SlackはWebhookで実装できます。
  • 定期実行はcronやsystemdタイマーで自動化してください。ログはローテーションを設定して肥大化を防ぎます。テスト運用で通知内容を確認してから本稼働に移してください。
よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

目次