インフラ・運用 2026.02.17

SSL証明書の自動更新に失敗してサイト停止!対処法と予防策

約11分で読めます

Let's Encryptの自動更新が突然失敗してサイトが表示されない!?実際の障害事例から学ぶ、SSL証明書運用の落とし穴と確実な対処法をご紹介します。

こんな緊急事態、経験ありませんか?

月曜日の朝、出社してメールを確認すると、お客様から「サイトが表示されない!」という連絡が。慌ててサイトにアクセスすると、**「この接続ではプライバシーが保護されません」**という警告画面が表示され、SSL証明書の期限切れが原因でした。

「Let's Encryptで自動更新を設定していたはずなのに、なぜ?」

実は、神奈川で20年以上Web制作を手がけてきた私たちFivenine Designでも、クライアントサイトでこのような事態に遭遇したことがあります。SSL証明書の自動更新は便利な機能ですが、完璧ではありません。今回は実際の障害事例をもとに、Let's Encryptの運用で注意すべき落とし穴と、確実な対処法をお伝えします。

なぜ自動更新が失敗するのか?主な原因を解明

実際にあった失敗パターン

あるクライアントの事例では、Let's Encryptのcertbotを使用してSSL証明書の自動更新を設定していました。3ヶ月間は順調に動作していたのですが、4回目の更新で突然失敗。原因を調査すると、以下の問題が判明しました。

1. サーバーのディスク容量不足 更新処理中に一時ファイルが作成されるため、ディスク容量が不足していると更新が失敗します。

2. Webサーバーの設定変更 他の開発者がApacheの設定を変更した際、Let's Encryptの認証に必要な.well-knownディレクトリへのアクセスがブロックされていました。

3. ファイアウォールの制限 サーバーのセキュリティを強化する際に、Let's Encryptの認証サーバーからのアクセスが制限されていました。

4. cronジョブの設定ミス 自動更新用のcronジョブが正しく設定されていない、または実行権限が不足していたケースもありました。

サーバー・インフラでお困りですか?

障害対応・移行・パフォーマンスチューニングなど、ご相談ください

無料で相談する

緊急時の対処法:サイトを即座に復旧させる手順

ステップ1: 現状確認と原因特定

まず、SSL証明書の状態を確認します:

# 証明書の有効期限を確認
sudo certbot certificates

# より詳細な情報を取得
openssl x509 -in /etc/letsencrypt/live/yourdomain.com/cert.pem -text -noout | grep "Not After"

次に、更新ログを確認して失敗の原因を特定します:

# Let's Encryptのログを確認
sudo tail -f /var/log/letsencrypt/letsencrypt.log

# cronジョブの実行履歴を確認
sudo grep CRON /var/log/syslog | grep certbot

ステップ2: 手動での証明書更新

原因が特定できたら、まず手動で証明書を更新して緊急復旧を図ります:

# 手動更新(ドライラン)
sudo certbot renew --dry-run

# 問題がなければ実際に更新
sudo certbot renew --force-renewal

# Webサーバーの再起動
sudo systemctl restart apache2
# または nginx の場合
# sudo systemctl restart nginx

ステップ3: 自動更新の修復

手動更新が成功したら、自動更新機能を修復します:

# cronジョブの確認
sudo crontab -l | grep certbot

# cronジョブが存在しない場合は追加
echo "0 12 * * * /usr/bin/certbot renew --quiet" | sudo crontab -

実際のクライアント事例では、この手順により約30分でサイトを復旧させることができました。事前に手順書を用意していたため、迅速な対応が可能でした。

監視とアラートの設定:再発防止の仕組みづくり

SSL証明書期限監視スクリプトの導入

証明書の期限切れを事前に検知するため、監視スクリプトを作成しました:

#!/bin/bash
# ssl-check.sh

DOMAIN="yourdomain.com"
EXPIRY_DATE=$(echo | openssl s_client -servername $DOMAIN -connect $DOMAIN:443 2>/dev/null | openssl x509 -noout -dates | grep notAfter | cut -d= -f2)
EXPIRY_TIMESTAMP=$(date -d "$EXPIRY_DATE" +%s)
CURRENT_TIMESTAMP=$(date +%s)
DAYS_UNTIL_EXPIRY=$(( ($EXPIRY_TIMESTAMP - $CURRENT_TIMESTAMP) / 86400 ))

if [ $DAYS_UNTIL_EXPIRY -lt 7 ]; then
    echo "警告: SSL証明書が$DAYS_UNTIL_EXPIRY日後に期限切れになります" | mail -s "SSL証明書期限切れ警告" [email protected]
fi

Slack通知の設定

より迅速な対応のため、Slack通知も設定します:

# Slack通知機能付きの監視スクリプト
#!/bin/bash
WEBHOOK_URL="https://hooks.slack.com/services/YOUR/WEBHOOK/URL"

if [ $DAYS_UNTIL_EXPIRY -lt 7 ]; then
    curl -X POST -H 'Content-type: application/json' \
        --data "{\"text\":\"⚠️ SSL証明書が${DAYS_UNTIL_EXPIRY}日後に期限切れになります\"}" \
        $WEBHOOK_URL
fi
期限30日前
初回アラート
メール通知で事前把握
期限7日前
警告アラート
Slack + メールで緊急度アップ
期限1日前
緊急アラート
電話 + 全通知手段で最終警告

よくある失敗パターンとその対処法

失敗パターン1: 複数ドメインでの更新漏れ

症状: メインドメインは更新されたが、サブドメインの証明書が期限切れ

原因: certbotの設定で一部のドメインが対象外になっている

対処法:

# 全ドメインの確認
sudo certbot certificates

# 不足しているドメインを追加
sudo certbot -d maindomain.com -d subdomain.maindomain.com --expand

失敗パターン2: Webサーバー再起動の失敗

症状: 証明書は更新されたが、Webサーバーが古い証明書を使用し続ける

原因: 更新後の自動再起動が設定されていない

対処法:

# 更新時の自動再起動設定
echo "0 12 * * * /usr/bin/certbot renew --quiet --post-hook 'systemctl restart apache2'" | sudo crontab -

失敗パターン3: Rate Limitエラー

症状: Let's Encryptの発行制限に引っかかって更新できない

原因: 短期間に何度も証明書を発行しようとした

対処法:

  • ステージング環境でテストしてから本番実行
  • 必要以上の強制更新を避ける

これらの失敗パターンを経験した別のクライアントでは、監視体制を整備することで、その後2年間、SSL関連のトラブルゼロを達成しています。

運用改善の成果:安定稼働への道のり

私たちが支援したクライアントの事例では、SSL証明書管理の改善により以下のような成果が得られました:

特に注目すべきは、緊急時の復旧時間が180分から30分に短縮されたことです。これは事前の準備と監視体制の整備によるものです。

サーバー・インフラでお困りですか?

障害対応・移行・パフォーマンスチューニングなど、ご相談ください

無料で相談する

サーバー管理、丸ごとお任せください

サーバー保守・運用

監視・障害対応・パフォーマンス改善まで、安定稼働をサポートします

200件以上の制作実績 顧客満足度97% 初回相談無料

※ 通常1営業日以内にご返信します

まとめ:確実なSSL証明書運用のために

Let's EncryptのSSL証明書は無料で便利ですが、「設定したら終わり」ではありません。継続的な監視と適切な運用体制が必要です。

重要なポイントをまとめると:

  1. 予防が最重要: 監視とアラートの仕組みを必ず構築する
  2. 緊急時の準備: 手順書とスクリプトを事前に用意しておく
  3. 定期的な確認: 月1回は証明書の状態を手動でチェックする
  4. 複数の通知手段: メール、Slack、SMSなど多重の通知設定

もしSSL証明書の運用でお困りのことがあれば、20年以上の実績を持つ私たちFivenine Designがサポートいたします。緊急時の復旧から予防体制の構築まで、お気軽にご相談ください。

次のステップ:今すぐ実行すべき確認項目

この記事をシェア

サーバー・インフラの課題を解決します

構築・移行・監視・障害対応まで、安定した運用環境をご提供します。 初回相談は無料です。

※ 1営業日以内にご返信いたします

この技術でお困りなら

無料でプロに相談できます

相談する
AIに無料相談