SSL監視は有効期限の確認以上のものです。完全な監視セットアップでは、証明書の有効期限切れ、設定変更、不正な証明書の発行、SSLエラーによるダウンタイムを監視します。
証明書の有効期間が2029年までに47日に短縮されるため、プロアクティブな監視は不可欠になります。更新漏れはサイトをオフラインにします。
監視すべき項目
| 対象 | 理由 | 頻度 |
|---|---|---|
| 証明書の有効期限 | 有効期限切れ = サイトダウン | 毎日 |
| 証明書チェーン | 不完全なチェーン = 一部デバイスで失敗 | 毎週 |
| TLSバージョン | 古いTLSバージョンはブラウザに無効化される | 毎月 |
| CTログ | ドメインの不正な証明書を検出 | 継続的 |
| OCSPステープリング | ステープリング障害はパフォーマンスを低下させる | 毎週 |
| HSTSヘッダー | HSTSがないとダウングレード攻撃に脆弱 | 毎月 |
無料の監視オプション
1. Cronスクリプト(セルフホスト)
#!/bin/bash
# /usr/local/bin/ssl-monitor.sh
DOMAINS="example.com www.example.com api.example.com"
WARN_DAYS=30
ALERT_EMAIL="admin@example.com"
for domain in $DOMAINS; do
expiry=$(echo | openssl s_client -connect "$domain":443 -servername "$domain" 2>/dev/null | openssl x509 -noout -enddate 2>/dev/null | cut -d= -f2)
if [ -z "$expiry" ]; then
echo "ERROR: Can't connect to $domain:443" | mail -s "SSL Monitor: $domain unreachable" $ALERT_EMAIL
continue
fi
expiry_epoch=$(date -d "$expiry" +%s 2>/dev/null)
now_epoch=$(date +%s)
days_left=$(( (expiry_epoch - now_epoch) / 86400 ))
if [ "$days_left" -lt "$WARN_DAYS" ]; then
echo "$domain certificate expires in $days_left days ($expiry)" | mail -s "SSL Expiry Warning: $domain" $ALERT_EMAIL
fi
done
# crontabに追加 -- 毎日9時に実行
0 9 * * * /usr/local/bin/ssl-monitor.sh
2. UptimeRobot(SaaS — 無料枠あり)
- UptimeRobotでサインアップします
- モニターを追加 → タイプ:HTTPS
- ドメインURLを入力します
- SSL有効期限アラートを設定:有効期限の30日前
- アラートを設定:メール、Slack、Webhook
UptimeRobotは5分ごとにチェックし、ダウンタイムと証明書の有効期限の両方でアラートを送信します。
3. 証明書の透明性の監視
ドメインに対して不正な証明書が発行されていないか、CTログを監視します:
| サービス | 方法 | コスト |
|---|---|---|
| Cert Spotter(SSLMate) | 新しい証明書のメールアラート | 無料枠あり |
| crt.sh | 手動検索 | 無料 |
| Facebook CT Monitor | Facebookの監視ツール | 無料 |
有料監視ツール
| ツール | 機能 | 価格 |
|---|---|---|
| Better Uptime | SSL + 稼働時間 + インシデント管理 | 無料枠 / $20+/月 |
| Datadog | SSL チェック付きフルインフラ監視 | $15+/ホスト/月 |
| Pingdom | SSL + 稼働時間 + パフォーマンス | $10+/月 |
| StatusCake | SSL監視 + アラート | 無料枠 / $20+/月 |
フル監視構成の例
本番サイトでは、複数のレイヤーを組み合わせてください:
レイヤー1: Certbot自動更新(有効期限切れを防止)
レイヤー2: Cronスクリプト(更新失敗をキャッチ -- 日次メール)
レイヤー3: UptimeRobot(SSLエラーをキャッチ -- 5分チェック)
レイヤー4: CT監視(不正な証明書をキャッチ -- 継続的)
これにより多層防御が実現します。単一障害点がありません。
GetHTTPSでの監視
GetHTTPSには組み込みの監視機能はありません(証明書発行ツールです)。ただし、ワークフローは以下のようにすべきです:
- GetHTTPSで証明書を発行する
- 更新リマインダーを設定 — 90日中60日目にカレンダーアラート
- SSL監視を追加 — バックアップとしてCronスクリプトまたはSaaSツール
- 本番環境での自動更新にCertbotを検討する
よくある質問
最低限必要な監視は何ですか?
最低限:証明書更新のカレンダーリマインダー(90日中60日目)と、自動チェック(CronスクリプトまたはUptimeRobot)。カレンダーが通常の更新をキャッチし、自動チェックが障害をキャッチします。
複数ドメインを監視するにはどうすればいいですか?
上記のCronスクリプトはループで複数ドメインを処理します。UptimeRobotなどのSaaSツールでは、複数のモニター(ドメインごとに1つ)を追加できます。
ステージング/開発環境の証明書も監視すべきですか?
はい、有効期限のあるLet’s Encrypt証明書の場合は。ステージング環境の証明書が有効期限切れになると、QAと開発がブロックされます。最低限、カレンダーリマインダーを設定してください。
有効期限だけでなく証明書チェーンも監視すべきですか?
SSL Labs APIは自動的なチェーン検証を提供します。手動で簡単に確認するには:
echo | openssl s_client -connect example.com:443 2>/dev/null | grep "Verify return code"
チェーン監視のためにこれをCronスクリプトに追加してください。