ページ更新日:2026/05/02
Nginxでは、SSL証明書のインストール後にいくつかの追加設定を行うことで、セキュリティと評価(Qualys SSL Labs グレード)を大幅に向上させられます。
このページでは HSTS・TLSバージョン制限・安全な暗号スイート・OCSP Stapling の設定方法を解説します。
基本的なインストール手順は NginxへのSSL証明書インストール手順 をご覧ください。
HSTSを有効にすると、ブラウザが次回以降のアクセスを自動的に HTTPS で行うようになります。
max-age は秒単位で、下記の例は1年(31536000秒)です。includeSubDomains を付けるとサブドメインにも適用されます。
server {
listen 443 ssl;
server_name www.example.com;
# HSTS:1年間HTTPSを強制
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}
※ always を付けることで、エラーレスポンス時にもヘッダーが送出されます。
※ HSTSは一度ブラウザに記録されると、max-age が切れるまで解除できません。まず短い値(例:max-age=300)でテストすることを推奨します。
TLS 1.0・1.1 は既に多くのブラウザで廃止されており、PCI DSS でも利用禁止とされています。ssl_protocols で TLS 1.2 と 1.3 のみを許可します。
ssl_protocols TLSv1.2 TLSv1.3;
※ TLS 1.3 は Nginx 1.13.0 以降(OpenSSL 1.1.1 以降)でサポートされます。
弱い暗号(RC4・MD5・エクスポート暗号など)を除外し、前方秘匿性(PFS)に対応した暗号スイートを優先します。
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off;
※ TLS 1.3 では暗号スイートはプロトコル固定のため、ssl_ciphers の設定は TLS 1.2 以下に適用されます。
※ ssl_prefer_server_ciphers off は TLS 1.3 推奨の設定です。
OCSP Staplingを有効にすると、サーバーが証明書の失効情報をあらかじめ取得してクライアントに渡すため、接続が高速化されます。
ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s;
※ ssl_certificate に中間CA証明書を含むチェーン証明書が設定されていることが必要です。
※ resolver には DNSサーバーのIPアドレスを指定します(上記は Google Public DNS の例)。
DHE(Diffie-Hellman鍵交換)を使う場合、デフォルトの 1024ビット DHパラメータでは Qualys でグレードが下がります。2048ビット以上を生成して指定します。
# 生成(数分かかる場合があります) openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
# nginx.conf に追加 ssl_dhparam /etc/nginx/ssl/dhparam.pem;
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate /etc/nginx/ssl/server_chain.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
root /var/www/html;
index index.html;
}
server {
listen 80;
server_name www.example.com;
return 301 https://$host$request_uri;
}
設定後は Qualys SSL Labs でグレードを確認します。上記の設定が正しく適用されていれば「A+」が表示されます。
「B」以下になる主な原因:TLS 1.0/1.1 が有効・DHパラメータが 1024ビット・HSTS が未設定。
nginx -V コマンドでバージョンとOpenSSLのバージョンを確認できます。
preload ディレクティブを追加するとブラウザのHSTSプリロードリストへの登録申請が可能です。
on(サーバー優先)が一般的でしたが、TLS 1.3 ではクライアント側の暗号スイートの選択に任せる off が推奨されています。TLS 1.2/1.3 を両方サポートする場合は off が無難です。
関連ページ:
NginxへのSSL証明書インストール手順
HSTS(HTTP Strict Transport Security)とは?設定方法と注意点
OCSP Staplingとは?Apache・Nginxでの設定手順
TLSバージョンと暗号スイートの設定ガイド
Qualys SSL Labs で確認