岐阜のホームページ制作|デザイン会社 sober design

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

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

no-img

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 証明書の更新はセキュリティ上重要な作業なので、定期的な確認と適切な設定を心がけましょう。