Nginxでサーバー証明書が更新後に反映されない場合の対処方法

2025年1月25日土曜日

nginx

t f B! P L

Nginxを使用している環境で、サーバー証明書を更新したにもかかわらず、新しい証明書が正しく反映されない問題が発生することがあります。このような状況では、設定の確認や特定の手順が必要です。本記事では、一般的な原因と対処方法に加え、Windows+Nginxの環境で特有の注意点についても解説します。

原因となる主な要素

  1. Nginxの設定キャッシュ
    Nginxは設定ファイルをメモリ上に読み込むため、証明書を更新してもNginxを再起動またはリロードしないと、新しい証明書が反映されません。

  2. 証明書ファイルの権限の問題
    証明書の権限が適切に設定されていない場合、Nginxが証明書にアクセスできず、古い証明書が使用され続ける可能性があります。

  3. 証明書ファイルの配置ミス
    設定ファイルで指定されているパスと、実際の証明書ファイルの場所が一致していない場合、新しい証明書が反映されません。

  4. キャッシュの影響
    ブラウザやCDNが古い証明書をキャッシュしていることが原因の場合もあります。

  5. Windows環境特有のキャッシュ問題
    WindowsでNginxを使用している場合、Nginxのサービス再起動だけでは内部に保持されている証明書のキャッシュがクリアされないケースがあります。

対処方法

1. Nginxの設定をリロードまたは再起動する

Nginxは証明書を設定ファイルの一部として扱うため、証明書を更新した後に以下のコマンドでリロードまたは再起動してください。

  • 設定のリロード

    sudo nginx -s reload
    

    設定の変更を反映しつつ、現在の接続は維持されます。

  • 再起動

    sudo systemctl restart nginx
    

    サービスを完全に停止して再開するため、リロードよりも確実ですが、一時的にすべての接続が切断されます。

2. 証明書ファイルの権限を確認する(Linuxの場合)

Linux環境では、証明書と秘密鍵の権限が適切であることを確認してください。

sudo chmod 600 /etc/ssl/certs/your_cert.pem
sudo chmod 600 /etc/ssl/private/your_key.pem
sudo chown root:nginx /etc/ssl/certs/your_cert.pem
sudo chown root:nginx /etc/ssl/private/your_key.pem

Windowsの場合、権限設定よりもファイルの配置パスや読み取り可否を確認することが重要です。

3. 証明書ファイルのパスを確認する

Nginxの設定ファイル(例: /etc/nginx/sites-available/default)で、証明書と秘密鍵のパスが正しいことを確認してください。

例:

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate     /etc/ssl/certs/your_cert.pem;
    ssl_certificate_key /etc/ssl/private/your_key.pem;
}

Windowsでは、ファイルパスをWindows形式で記述する必要があります。例えば:

ssl_certificate "C:\\nginx\\certs\\your_cert.pem";
ssl_certificate_key "C:\\nginx\\private\\your_key.pem";

4. 証明書チェーンを確認する

証明書チェーンが正しく設定されていないと、クライアントによってはエラーが発生します。ssl_certificateに中間証明書を含む完全な証明書チェーンを指定してください。

例:

cat your_cert.pem intermediate_cert.pem > fullchain.pem

設定例:

ssl_certificate /etc/ssl/certs/fullchain.pem;

5. Windows環境での特有の対処方法

Windows環境でNginxを使用している場合、サービスの再起動だけでは内部の証明書キャッシュがクリアされないケースがあります。この問題を解決するために、Windows自体を再起動する必要があります。

以下は、実際の経験談に基づく手順です:

  1. 証明書を正しい場所に更新。

  2. Nginxサービスを再起動。

    nginx -s reload
    
  3. それでも反映されない場合は、Windows自体を再起動。

Windowsを再起動することで、Nginxが保持している証明書キャッシュがクリアされ、新しい証明書が正しく反映されました。

6. ブラウザやCDNのキャッシュをクリアする

証明書がサーバー側で正しく反映されても、ブラウザやCDNが古い証明書をキャッシュしていることがあります。この場合は以下を試してください。

  • ブラウザのキャッシュをクリア。
  • CDNを利用している場合、キャッシュをリフレッシュ。

設定確認コマンド

証明書が正しく反映されているかを確認するために、以下のコマンドを使用して確認します。

echo | openssl s_client -connect example.com:443 -servername example.com | openssl x509 -noout -dates -subject

まとめ

Nginxで証明書を更新しても反映されない問題は、Nginxのキャッシュや設定ミス、さらにWindows環境特有の挙動などが原因で発生します。
Windows+Nginxを使用しており、うまく証明書が更新されない場合は、最後の手段としてOS自体の再起動が解決のカギになることを覚えておいてください。問題を迅速に解決し、安全な接続を維持するために、本記事を参考に適切な手順を実行してください!

スポンサーリンク
スポンサーリンク

このブログを検索

Profile

自分の写真
Webアプリエンジニア。 日々新しい技術を追い求めてブログでアウトプットしています。
プロフィール画像は、猫村ゆゆこ様に書いてもらいました。

仕事募集もしていたり、していなかったり。

QooQ