メールアイコン ご相談はこちらから

Let’s Encrypt の証明書更新後に Nginx が古い証明書を提供する問題の解決方法

no-img
  1. 問題の概要
  2. 解決手順
    1. 1. Nginx の設定ファイルで証明書のパスを確認
    2. 2. 証明書ファイルの有効期限を確認
    3. 3. Nginx の設定をテスト
    4. 4. Nginx をリロード
    5. 5. サーバーが提供する証明書の有効期限を再確認
    6. 6. ブラウザで確認
  3. Let’s Encrypt の証明書自動更新設定
    1. 1. cron ジョブの設定
    2. 2. 自動更新のテスト
  4. 注意点
  5. まとめ
  6. 最後に

Let’s Encrypt の証明書更新後に Nginx が古い証明書を提供する問題の解決方法

Let’s Encrypt を使用して SSL 証明書を更新したにもかかわらず、Nginx が古い証明書を提供し続ける問題に直面しました。この問題を解決するための手順をまとめました。同じ問題でお困りの方の参考になれば幸いです。

問題の概要

  • 症状: Let’s Encrypt で証明書を更新したが、ブラウザで確認すると古い証明書のまま。
  • 原因の推測: Nginx が新しい証明書を読み込んでいない可能性がある。

解決手順

1. Nginx の設定ファイルで証明書のパスを確認

Nginx が正しい証明書ファイルを参照しているか確認します。

sudo nano /jet/etc/nginx/conf.d/default.vhost

ssl_certificatessl_certificate_key のパスが正しいことを確認します。

ssl_certificate "/etc/letsencrypt/live/your_domain/fullchain.pem";
ssl_certificate_key "/etc/letsencrypt/live/your_domain/privkey.pem";

2. 証明書ファイルの有効期限を確認

指定された証明書ファイルが更新されているか確認します。

sudo openssl x509 -in /etc/letsencrypt/live/your_domain/fullchain.pem -noout -dates

notAfter の日時が未来の日付になっていることを確認します。

3. Nginx の設定をテスト

設定ファイルにエラーがないかテストします。

sudo /jet/bin/nginx -t -c /jet/etc/nginx/nginx.conf

エラーが出た場合の対処

エラー例:

nginx: [emerg] getgrnam("nobody") failed

対処方法

nginx.conf ファイルに user ディレクティブを追加し、存在するユーザーを指定します。

sudo nano /jet/etc/nginx/nginx.conf

ファイルの先頭に以下を追加します。

user www-data;

または

user jet;

4. Nginx をリロード

設定を反映させるために、Nginx をリロードします。

sudo /jet/bin/nginx -s reload -c /jet/etc/nginx/nginx.conf

5. サーバーが提供する証明書の有効期限を再確認

Nginx が新しい証明書を提供しているか確認します。

echo | openssl s_client -connect your_domain:443 2>/dev/null | openssl x509 -noout -dates

notAfter の日時が更新されていることを確認します。

6. ブラウザで確認

ウェブブラウザでサイトにアクセスし、SSL 証明書の有効期限が更新されていることを確認します。

Let’s Encrypt の証明書自動更新設定

証明書の自動更新と Nginx の自動リロードを設定して、今後も問題が起きないようにします。

1. cron ジョブの設定

root ユーザーの crontab を編集します。

sudo crontab -e

以下の行を追加します。

0 3 * * * /usr/bin/certbot renew --quiet && /jet/bin/nginx -s reload -c /jet/etc/nginx/nginx.conf

2. 自動更新のテスト

自動更新が正しく機能するか確認します。

sudo certbot renew --dry-run

エラーがなければ設定完了です。

注意点

  • ユーザーの確認: nginx.confuser ディレクティブで指定するユーザーが存在することを確認してください。
  • 権限の設定: 証明書ファイルの権限を適切に設定し、Nginx がアクセスできるようにします。
sudo chown -R root:root /etc/letsencrypt
sudo chmod -R 755 /etc/letsencrypt
  • ファイアウォールの設定: ポート 80 と 443 が開いていることを確認します。
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload

まとめ

  • Nginx が正しい証明書を参照しているか確認することが重要。
  • nginx.conf の設定ミス(特に user ディレクティブの欠如)がエラーの原因になる。
  • 証明書の自動更新と Nginx の自動リロードを設定することで、今後のトラブルを防止できる。

最後に

同じ問題でお困りの方の参考になれば幸いです。SSL 証明書の更新はセキュリティ上重要な作業なので、定期的な確認と適切な設定を心がけましょう。