Let’s Encrypt の証明書更新後に Nginx が古い証明書を提供する問題の解決方法
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_certificate
と ssl_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.conf
のuser
ディレクティブで指定するユーザーが存在することを確認してください。 - 権限の設定: 証明書ファイルの権限を適切に設定し、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 証明書の更新はセキュリティ上重要な作業なので、定期的な確認と適切な設定を心がけましょう。