SSL証明書の有効期限が切れると、ブラウザはフルページのセキュリティ警告を表示し、訪問者がサイトにアクセスできなくなります。ここでは、証明書の有効期限を確認する方法と、監視を設定する方法を解説します。
ブラウザから確認する
https://でサイトにアクセスします- アドレスバーの南京錠アイコンをクリックします
- **「証明書」または「この接続は保護されています」→「証明書は有効です」**をクリックします
- **「有効期限」または「失効日」**の日付を確認します
OpenSSLで確認する(コマンドライン)
リモート確認(任意のマシンから)
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -enddate
出力例: notAfter=Aug 5 12:00:00 2026 GMT
ローカルファイルの確認
openssl x509 -noout -enddate -in /etc/ssl/gethttps/fullchain.pem
すべての詳細を一度に確認
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -subject -issuer -dates
ワンライナースクリプトで確認する
証明書が30日以内に有効期限切れになるかどうかを確認します:
if openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -checkend 2592000 > /dev/null 2>&1; then
echo "Certificate is valid for at least 30 more days"
else
echo "WARNING: Certificate expires within 30 days!"
fi
複数ドメインを一度に確認する
複数のドメインを管理している場合、ループで一括確認できます:
for domain in example.com www.example.com api.example.com; do
expiry=$(echo | openssl s_client -connect "$domain":443 -servername "$domain" 2>/dev/null | openssl x509 -noout -enddate 2>/dev/null | cut -d= -f2)
echo "$domain — expires: $expiry"
done
cronによる自動監視
証明書の有効期限が30日以内に迫ったらメール通知する日次cronジョブを作成します:
#!/bin/bash
# Save as /usr/local/bin/check-ssl-expiry.sh
DOMAINS="example.com www.example.com api.example.com"
WARN_DAYS=30
WARN_SECS=$((WARN_DAYS * 86400))
for domain in $DOMAINS; do
if ! echo | openssl s_client -connect "$domain":443 -servername "$domain" 2>/dev/null | \
openssl x509 -noout -checkend $WARN_SECS > /dev/null 2>&1; then
echo "WARNING: $domain certificate expires within $WARN_DAYS days" | \
mail -s "SSL Expiry Warning: $domain" admin@example.com
fi
done
crontabに追加: 0 9 * * * /usr/local/bin/check-ssl-expiry.sh
監視サービスを設定する
より堅牢なアプローチとして、監視サービスを利用できます:
| 方法 | 手順 | コスト | アラートオプション |
|---|---|---|---|
| カレンダーリマインダー | 発行後60日に設定 | 無料 | 手動 |
| Cronスクリプト | チェックスクリプトを毎日実行 | 無料 | メール |
| UptimeRobot | SSL監視を追加、アラート閾値を設定 | 無料枠あり | メール、Slack、Webhook |
| Better Uptime | インシデント管理付きSSL監視 | 無料枠あり | メール、SMS、Slack |
| Certbot自動更新 | systemdタイマーでcertbot renew | 無料 | 有効期限切れを完全に防止 |
Let’s Encryptの90日証明書の場合、60日目に更新します(30日のバッファ)。
証明書のどの詳細を検証すべきですか?
有効期限以外にも、定期的に以下を確認してください:
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -text | grep -E 'Subject:|Issuer:|Not After|DNS:'
これにより以下が表示されます:
- Subject/SAN — 証明書が正しいドメインをカバーしているか
- Issuer — 期待される認証局(例:Let’s Encrypt)が発行しているか
- Not After — 有効期限
- DNS names — SANフィールド内のすべてのドメイン名
よくある質問
証明書の有効期限が切れるとどうなりますか?
ブラウザは「この接続ではプライバシーが保護されません」(Chrome)や「警告:潜在的なセキュリティリスクあり」(Firefox)などのフルページ警告を表示します。ほとんどの訪問者はすぐに離脱します。検索エンジンも証明書が更新されるまでページの順位を下げたり、インデックスから除外したりする場合があります。
どのくらいの頻度で確認すべきですか?
自動更新(Certbot)を設定している場合は、安全策として月に一度確認してください。手動で更新する場合(GetHTTPS)、50日目に確認し、60日目に厳密なリマインダーを設定してください。2029年に47日間の有効期限が導入されると、監視はさらに重要になります。
コマンドラインにアクセスできなくても有効期限を確認できますか?
はい。SSL Labs Server TestやSSL ShopperのSSL Checkerなどのオンラインツールで、ドメインを入力するだけで有効期限を含む証明書の詳細を確認できます。ブラウザのDevToolsでも確認できます(南京錠アイコン → 証明書の詳細)。
証明書がすでに有効期限切れの場合はどうすればいいですか?
すぐに更新してください。GetHTTPSにアクセスして新しい証明書を取得し、サーバー上のファイルを置き換えて、Webサーバーをリロードしてください。この作業は5分で完了します。証明書の有効期限が切れても特にペナルティはありません。更新して新しい証明書をインストールするだけです。
1つのスクリプトで複数ドメインを監視できますか?
はい。すべてのドメインを確認して残り日数を出力するスクリプトの例です:
#!/bin/bash
for domain in example.com www.example.com api.example.com; do
expiry=$(echo | openssl s_client -connect "$domain":443 -servername "$domain" 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2)
days_left=$(( ($(date -d "$expiry" +%s) - $(date +%s)) / 86400 ))
if [ "$days_left" -lt 30 ]; then
echo "WARNING $domain: $days_left days left"
else
echo "OK $domain: $days_left days left"
fi
done
注意: date -d の構文はLinux固有です。macOSでは date -j -f "%b %d %H:%M:%S %Y %Z" を使用してください。