サポート › 証明書のインストール › Nginx
Nginx への SSL/TLS 証明書インストール
現在の主流Webサーバ Nginx での SSL/TLS 証明書インストール手順。
2026年版の推奨設定(TLS 1.3 / HTTP/2 / HTTP/3 / HSTS)も含めて解説します。
🛠️ 事前準備
- SSL ストアから取得した サーバ証明書(
example.com.crt) - CSR 作成時の 秘密鍵(
example.com.key) - 中間 CA 証明書(認証局から提供)
- Nginx 1.18 以降がインストール済み
📋 手順
-
fullchain 形式に結合
Nginx では サーバ証明書 + 中間CA証明書を1ファイルに結合するのが一般的です。
# サーバ証明書 + 中間CA証明書 → fullchain $ cat example.com.crt intermediate.crt > example.com.fullchain.crt💡 順序が重要 サーバ証明書を先に、中間CA証明書を後に結合します。順序を間違えるとブラウザでエラーが出ます。 -
証明書ファイルの配置
# SSL証明書ディレクトリの作成 $ sudo mkdir -p /etc/nginx/ssl $ sudo chmod 700 /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 $ sudo chown root:root /etc/nginx/ssl/* -
Nginx 設定ファイルの作成
/etc/nginx/conf.d/example.com.conf(2026年推奨設定)server { listen 443 ssl; listen [::]:443 ssl; http2 on; # HTTP/2 有効化(Nginx 1.25.1+) 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; # === TLS バージョン(2026年推奨) === 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; # === OCSP Stapling === ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 1.1.1.1 valid=300s; resolver_timeout 5s; # === HSTS(推奨) === 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; add_header Referrer-Policy "strict-origin-when-cross-origin" always; # === ドキュメントルート === root /var/www/html; index index.html index.htm; location / { try_files $uri $uri/ =404; } # === ログ === access_log /var/log/nginx/example.com.access.log; error_log /var/log/nginx/example.com.error.log; } # HTTP → HTTPS リダイレクト server { listen 80; listen [::]:80; server_name example.com www.example.com; return 301 https://$host$request_uri; }💡 Nginx 1.25.1 以降のhttp2 on;構文 古い Nginx ではlisten 443 ssl http2;と書きましたが、1.25.1 以降ではlisten 443 ssl;+ 別行でhttp2 on;と書くのが推奨です。 -
設定ファイルの構文チェック
$ sudo nginx -t # 期待される出力 nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful❌ エラーが出た場合は再読み込みしない 構文エラーが残ったまま再読み込みすると、Nginx が停止する可能性があります。必ず「syntax is ok」を確認してから次のステップに進んでください。 -
Nginx の再読み込み
# 設定の再読み込み(無停止) $ sudo nginx -s reload # または systemd 経由 $ sudo systemctl reload nginx # 起動状態の確認 $ sudo systemctl status nginx -
動作確認
ブラウザで
https://example.comにアクセスし、鍵アイコンが表示されることを確認します。# 証明書情報の確認 $ openssl s_client -connect example.com:443 -servername example.com < /dev/null # 証明書チェーンの確認 $ openssl s_client -connect example.com:443 -showcerts < /dev/null✅ SSL Labs でテスト SSL Labs SSL Test で SSL/TLS のセキュリティスコアを確認できます。A 評価以上を目指しましょう。
🛡️ より厳格なセキュリティ設定(Mozilla Intermediate相当)
# TLS 1.2 / 1.3 のみ
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;
# HSTS(最大)
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
⚡ RSA + ECC デュアル証明書
Nginx はRSA と ECC の両方の証明書を同時に提供できます。クライアントは対応するアルゴリズムを自動選択します。
server {
listen 443 ssl;
http2 on;
server_name example.com;
# RSA 証明書
ssl_certificate /etc/nginx/ssl/example.com.rsa.fullchain.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.rsa.key;
# ECC 証明書
ssl_certificate /etc/nginx/ssl/example.com.ecc.fullchain.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.ecc.key;
# ...その他の設定
}
🚀 HTTP/3(QUIC)対応
Nginx 1.25 以降で HTTP/3 が実験的にサポートされています。最新の高速化技術を試したい方向け。
server {
listen 443 ssl;
listen 443 quic reuseport; # HTTP/3 用 UDP リスナー
http2 on;
http3 on;
server_name example.com;
# Alt-Svc ヘッダで HTTP/3 を広報
add_header Alt-Svc 'h3=":443"; ma=86400' always;
ssl_certificate /etc/nginx/ssl/example.com.fullchain.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
# ...
}
❓ よくあるご質問
Q. ブラウザに「保護されていません」と表示されます
主な原因:
- 中間CA証明書が結合されていない →
cat server.crt intermediate.crt > fullchain.crt - 結合順序が逆 → サーバ証明書を先に、中間CA証明書を後に
- コモンネーム不一致 → 証明書の CN/SAN とアクセスURLが一致しているか確認
Q. HTTP/2 が有効化されません
Nginx のバージョンを確認してください。nginx -V で確認できます。1.25.1 以降では http2 on; 構文を、それ以前のバージョンでは listen 443 ssl http2; 構文を使います。また、--with-http_v2_module がコンパイルオプションに含まれている必要があります。
Q. SNI で複数サイトを運用したい
Nginx は SNI に標準対応しています。server ブロックを複数作成し、それぞれに server_name と証明書を指定するだけです。
Q. certbot で完全自動化したい
Nginx は certbot との連携が非常にスムーズです。certbot --nginx 一発で、Nginx 設定の編集・証明書取得・更新スケジュール登録までを完全自動化できます。詳しくは certbot 使い方 をご参照ください。
Q. OCSP Stapling とは?
サーバが認証局の OCSP レスポンス(証明書失効確認)を事前に取得し、クライアントとのハンドシェイク時に提供する技術です。クライアントから認証局への問い合わせが不要になるため、接続が高速化されます。Nginx では ssl_stapling on; で有効化できます。