Nginx
Nginx への SSL/TLS 証明書インストール
現在の主流Webサーバ Nginx での SSL/TLS 証明書インストール手順。
2026年版の推奨設定(TLS 1.3 / HTTP/2 / HSTS)も含めて解説します。
🛠️ 事前準備
- SSL ストアから取得した サーバ証明書(
example.com.crt) - CSR 作成時の 秘密鍵(
example.com.key) - 中間 CA 証明書(認証局から提供)
- Nginx 1.18 以降がインストール済み
📋 手順
-
fullchain 形式に結合
Nginx では サーバ証明書 + 中間CA証明書を1ファイルに結合するのが一般的です。
$ cat example.com.crt intermediate.crt > example.com.fullchain.crt💡 順序が重要 サーバ証明書を先に、中間CA証明書を後に結合します。 -
証明書ファイルの配置
$ sudo mkdir -p /etc/nginx/ssl $ sudo cp example.com.fullchain.crt /etc/nginx/ssl/ $ sudo cp example.com.key /etc/nginx/ssl/ $ sudo chmod 644 /etc/nginx/ssl/example.com.fullchain.crt $ sudo chmod 600 /etc/nginx/ssl/example.com.key -
Nginx 設定ファイルの作成
/etc/nginx/conf.d/example.com.conf(2026年推奨設定)server { listen 443 ssl; listen [::]:443 ssl; http2 on; server_name example.com www.example.com; ssl_certificate /etc/nginx/ssl/example.com.fullchain.crt; ssl_certificate_key /etc/nginx/ssl/example.com.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5:!3DES; ssl_prefer_server_ciphers off; ssl_session_cache shared:SSL:10m; ssl_session_timeout 1d; ssl_session_tickets off; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 1.1.1.1 valid=300s; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; add_header X-Content-Type-Options "nosniff" always; add_header X-Frame-Options "SAMEORIGIN" always; root /var/www/html; index index.html; } server { listen 80; server_name example.com www.example.com; return 301 https://$host$request_uri; } -
設定ファイルの構文チェック
$ sudo nginx -t nginx: configuration file /etc/nginx/nginx.conf test is successful -
Nginx の再読み込み
$ sudo nginx -s reload -
動作確認
$ openssl s_client -connect example.com:443 -servername example.com < /dev/null
⚡ RSA + ECC デュアル証明書
Nginx はRSA と ECC の両方の証明書を同時に提供できます。
ssl_certificate /etc/nginx/ssl/example.com.rsa.fullchain.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.rsa.key;
ssl_certificate /etc/nginx/ssl/example.com.ecc.fullchain.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.ecc.key;
❓ よくあるご質問
Q. ブラウザに「保護されていません」と表示されます
主な原因:中間CA証明書が結合されていない、結合順序が逆、コモンネーム不一致。詳しくは トラブルシューティング。
Q. certbot で完全自動化したい
certbot --nginx 一発で完全自動化できます。詳しくは certbot 使い方。