Nginx SSL/TLS設定

NginxでSSL/TLS証明書を設定し、最新の暗号スイート、プロトコル設定、OCSPステープリング、セッションキャッシュを使用したセキュアなHTTPS接続を構成する方法を解説します。

Security

詳細な説明

SSL/TLS暗号化は、クライアントとサーバー間の通信データを保護するために不可欠です。Nginxは堅牢かつ高性能なTLS終端機能を提供し、数千の暗号化接続を効率的に処理できます。

基本的なSSL設定

HTTPSを有効にするには、SSL証明書と秘密鍵が必要です。ssl_certificate ディレクティブはフル証明書チェーンを、ssl_certificate_key は秘密鍵ファイルを指定します。

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    ssl_prefer_server_ciphers off;
}

プロトコルと暗号の選択

SSLv3、TLSv1.0、TLSv1.1は既知の脆弱性があるため無効にしてください。TLSv1.2とTLSv1.3が最新デプロイの推奨最低バージョンです。暗号にはAES-GCMやChaCha20-Poly1305などのAEAD暗号スイートを優先してください。これらは機密性と完全性を単一操作で提供し、古いCBCモード暗号よりもセキュリティとパフォーマンスの両方が向上します。

OCSPステープリング

OCSPステープリングは、Nginxが証明書の失効ステータスを直接取得しキャッシュすることでTLSハンドシェイクのパフォーマンスを改善します。各クライアントが個別に認証局へ確認する必要がなくなり、接続遅延の削減とプライバシーの向上が実現します。

ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/ssl/chain.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s;

セッションキャッシュ

TLSハンドシェイクは非対称暗号演算を伴うため計算コストが高くなります。セッションキャッシュにより、クライアントは保存されたセッションチケットや識別子を使用して以前のセッションを再開でき、後続の接続遅延を大幅に削減できます。

ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;

セッションチケットの無効化(ssl_session_tickets off)は、完全前方秘匿性(PFS)を優先する場合に推奨されます。チケットキーが漏洩するとPFSが損なわれる可能性があるためです。

セキュリティ推奨事項

  • openssl dhparam -out dhparam.pem 2048 で強力なDHパラメータファイルを生成する。
  • モバイルデバイスや古いブラウザでの信頼エラーを防ぐため、必ず完全な証明書チェーンを使用する。
  • SSL Labsで設定をテストし、A+評価を目指して弱点を特定する。

ユースケース

本番Webサーバーを堅牢化し、SSL Labs A+評価を達成し、すべてのクライアント・サーバー間通信を最新のTLS標準で暗号化します。

Try It — Nginx Config Generator

フルツールを開く