本文へスキップ
重要 SSL/TLS証明書 47日間ルール正式決定 — ACME自動更新の導入を推奨しております。 Phase 2(100日へ短縮)まで 298日
300,000枚 累計発行
17,206社 利用中
19年 運営
24時間365日 自動発行

サポート › 証明書のインストール › Nginx

NNginx

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 以降がインストール済み

📋 手順

  1. fullchain 形式に結合

    Nginx では サーバ証明書 + 中間CA証明書を1ファイルに結合するのが一般的です。

    # サーバ証明書 + 中間CA証明書 → fullchain
    $ cat example.com.crt intermediate.crt > example.com.fullchain.crt
    💡 順序が重要 サーバ証明書を先に、中間CA証明書を後に結合します。順序を間違えるとブラウザでエラーが出ます。
  2. 証明書ファイルの配置

    # 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/*
  3. 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; と書くのが推奨です。
  4. 設定ファイルの構文チェック

    $ 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」を確認してから次のステップに進んでください。
  5. Nginx の再読み込み

    # 設定の再読み込み(無停止)
    $ sudo nginx -s reload
    
    # または systemd 経由
    $ sudo systemctl reload nginx
    
    # 起動状態の確認
    $ sudo systemctl status nginx
  6. 動作確認

    ブラウザで 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; で有効化できます。