メニューSSL証明書 - メニュー
【SSL証明書】FAQ/情報

NginxのHSTSとTLS設定強化:SSL Labs グレード A+ を達成する設定例

ページ更新日:2026/05/02

Nginxでは、SSL証明書のインストール後にいくつかの追加設定を行うことで、セキュリティと評価(Qualys SSL Labs グレード)を大幅に向上させられます。
このページでは HSTS・TLSバージョン制限・安全な暗号スイート・OCSP Stapling の設定方法を解説します。
基本的なインストール手順は NginxへのSSL証明書インストール手順 をご覧ください。

HSTS(HTTP Strict Transport Security)の設定

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バージョンの制限

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の設定

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 の例)。

DHパラメータの生成(任意・推奨)

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;

設定例(まとめ:SSL Labs A+ 対応 nginx.conf 抜粋)

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 での確認方法

設定後は Qualys SSL Labs でグレードを確認します。上記の設定が正しく適用されていれば「A+」が表示されます。
「B」以下になる主な原因:TLS 1.0/1.1 が有効・DHパラメータが 1024ビット・HSTS が未設定。

よくある質問

Q. NginxのバージョンはTLS 1.3に対応していますか?
Nginx 1.13.0 以降(2017年リリース)+ OpenSSL 1.1.1 以降の組み合わせで TLS 1.3 が利用できます。nginx -V コマンドでバージョンとOpenSSLのバージョンを確認できます。
Q. HSTSを設定すると何に影響しますか?
有効化すると、そのドメインにブラウザが次回から強制的にHTTPSでアクセスするようになります。一度設定するとmax-age期間は解除できないため、HTTPS環境が安定してから設定することを推奨します。preload ディレクティブを追加するとブラウザのHSTSプリロードリストへの登録申請が可能です。
Q. ssl_prefer_server_ciphers on にしたほうがよいですか?
TLS 1.2 までは 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 で確認

↑ 上へ 注文 検索