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

Nginx 環境での CSR 作成手順

現在の主流Webサーバ Nginx で SSL/TLS 証明書を導入するための CSR 作成方法。OpenSSLコマンドで作成します。

📋 対応バージョン Nginx 1.18 以降 / OpenSSL 1.1.1 以降(推奨: OpenSSL 3.0 以降)。Linux(RHEL / Ubuntu / Debian / Alma / Rocky など)で動作します。

🛠️ 事前準備

  • サーバに OpenSSL がインストールされていること(バージョン確認: openssl version
  • Nginx の設定ファイル /etc/nginx/nginx.conf または /etc/nginx/conf.d/*.conf へのアクセス権限
  • 作業用ディレクトリへの書き込み権限(通常は /etc/nginx/ssl//etc/ssl/private/
  • 運営組織情報を準備(OV/EV の場合のみ)

📋 手順

  1. 作業ディレクトリの準備

    SSL証明書専用のディレクトリを作成し、適切な権限を設定します。

    # SSL証明書専用ディレクトリの作成
    $ sudo mkdir -p /etc/nginx/ssl
    $ sudo chmod 700 /etc/nginx/ssl
    $ cd /etc/nginx/ssl
  2. 秘密鍵(Private Key)の生成

    2048bit RSA 鍵を作成します(パスフレーズなし)。

    RSA 2048bit(標準)
    $ sudo openssl genrsa -out example.com.key 2048

    または ECC P-256(高速・軽量):

    ECC P-256
    $ sudo openssl ecparam -genkey -name prime256v1 -out example.com.key

    パーミッションを設定します。

    $ sudo chmod 600 example.com.key
    $ sudo chown root:root example.com.key
  3. CSR の生成(ワンライナー推奨)

    Nginx 環境では、コマンドライン引数で組織情報を指定してワンライナーで作成するのが効率的です。

    RSA 2048bit ワンライナー
    sudo openssl req -new -newkey rsa:2048 -nodes -sha256 \
      -keyout example.com.key \
      -out example.com.csr \
      -subj "/C=JP/ST=Tokyo/L=Shibuya-ku/O=NIJIMO, INC./CN=example.com"
    ECC P-256 ワンライナー
    sudo openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:P-256 -nodes -sha256 \
      -keyout example.com.key \
      -out example.com.csr \
      -subj "/C=JP/ST=Tokyo/L=Shibuya-ku/O=NIJIMO, INC./CN=example.com"

    項目の意味:

    項目意味
    /C=国コード(2文字)JP
    /ST=都道府県Tokyo
    /L=市区町村Shibuya-ku
    /O=組織名(正式英語名)NIJIMO, INC.
    /CN=コモンネーム(FQDN)example.com
    ⚠️ ワイルドカード証明書の場合 /CN=*.example.com のように先頭にアスタリスクを付けてください。シェルでアスタリスクがグロブ展開されないよう、必ずダブルクォートで囲む必要があります。
  4. SAN(Subject Alternative Name)を含む CSR の作成

    マルチドメイン証明書や、複数のサブドメインを1枚でカバーしたい場合は、SAN付きCSRを作成します。

    設定ファイルを作成
    # san.cnf を作成
    $ sudo tee san.cnf > /dev/null <<EOF
    [req]
    distinguished_name = req_distinguished_name
    req_extensions = v3_req
    prompt = no
    
    [req_distinguished_name]
    C = JP
    ST = Tokyo
    L = Shibuya-ku
    O = NIJIMO, INC.
    CN = example.com
    
    [v3_req]
    subjectAltName = @alt_names
    
    [alt_names]
    DNS.1 = example.com
    DNS.2 = www.example.com
    DNS.3 = api.example.com
    DNS.4 = shop.example.com
    EOF
    CSR を生成
    $ sudo openssl req -new -newkey rsa:2048 -nodes -sha256 \
      -keyout example.com.key \
      -out example.com.csr \
      -config san.cnf
    💡 SSLストアの管理画面で SANs 登録も可能 マルチドメイン証明書の場合、CSR にはプライマリFQDNのみを入れて、追加FQDN(SANs)は SSL ストアの管理画面で登録する方法もあります。どちらでも問題ありません。
  5. CSR の確認

    $ openssl req -in example.com.csr -noout -text
    Certificate Request:
        Data:
            Version: 1 (0x0)
            Subject: C=JP, ST=Tokyo, L=Shibuya-ku, O=NIJIMO, INC., CN=example.com
            Subject Public Key Info:
                Public Key Algorithm: rsaEncryption
                    Public-Key: (2048 bit)
            Requested Extensions:
                X509v3 Subject Alternative Name: 
                    DNS:example.com, DNS:www.example.com
  6. CSR を SSL ストアの管理画面に貼り付け

    生成された CSR の中身(-----BEGIN CERTIFICATE REQUEST----- から -----END CERTIFICATE REQUEST----- まで全て)を SSL ストアの管理画面の「CSR」欄に貼り付けます。

    💡 サーバソフトウェアの選択 管理画面でサーバソフトウェアを選択する場面では、「Apache」または「Apache以外」を選択してください(Nginx は Apache 系の証明書フォーマットを使用します)。

⚡ certbot で完全自動化(推奨)

Nginx は certbot との連携が非常にスムーズです certbot --nginx 一発で、Nginx の設定ファイル編集・証明書取得・更新スケジュール登録までを完全自動化できます。47日ルール時代の運用にはこちらが推奨です。

❓ よくあるご質問

Q. パスフレーズ付き秘密鍵を使うべきですか?

Nginx 自動起動・再起動時にパスフレーズ入力プロンプトが出ると無人運用ができなくなるため、パスフレーズなしが推奨です。秘密鍵のパーミッションを 600 に設定すれば十分です。

Q. 秘密鍵はどこに保存すべき?

標準的には /etc/nginx/ssl/ または /etc/ssl/private/ に保存し、パーミッションを 600、所有者を root に設定します。Nginx 起動時は root として読み込まれるため、Nginx ワーカープロセスの権限を下げても問題ありません。

Q. 既存の Apache 用 CSR は Nginx でも使えますか?

はい、使えます。CSR・秘密鍵・証明書のフォーマット(PEM形式)は Apache と Nginx で共通です。Apache から Nginx へ移行する場合、同じファイルをそのまま利用できます。

Q. RSA と ECC の両方の証明書を Nginx で運用できますか?

はい、可能です。Nginx はデュアル証明書に対応しており、ssl_certificate ディレクティブを複数指定することで、RSA と ECC の両方を同時に提供できます。クライアントは対応するアルゴリズムを自動選択します。