Nginx 環境での CSR 作成手順
現在の主流Webサーバ Nginx で SSL/TLS 証明書を導入するための CSR 作成方法。OpenSSLコマンドで作成します。
🛠️ 事前準備
- サーバに OpenSSL がインストールされていること(バージョン確認:
openssl version) - Nginx の設定ファイル
/etc/nginx/nginx.confまたは/etc/nginx/conf.d/*.confへのアクセス権限 - 作業用ディレクトリへの書き込み権限(通常は
/etc/nginx/ssl/や/etc/ssl/private/) - 運営組織情報を準備(OV/EV の場合のみ)
📋 手順
-
作業ディレクトリの準備
SSL証明書専用のディレクトリを作成し、適切な権限を設定します。
# SSL証明書専用ディレクトリの作成 $ sudo mkdir -p /etc/nginx/ssl $ sudo chmod 700 /etc/nginx/ssl $ cd /etc/nginx/ssl -
秘密鍵(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 -
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のように先頭にアスタリスクを付けてください。シェルでアスタリスクがグロブ展開されないよう、必ずダブルクォートで囲む必要があります。 -
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 EOFCSR を生成$ 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 ストアの管理画面で登録する方法もあります。どちらでも問題ありません。 -
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 -
CSR を SSL ストアの管理画面に貼り付け
生成された CSR の中身(
-----BEGIN CERTIFICATE REQUEST-----から-----END CERTIFICATE REQUEST-----まで全て)を SSL ストアの管理画面の「CSR」欄に貼り付けます。💡 サーバソフトウェアの選択 管理画面でサーバソフトウェアを選択する場面では、「Apache」または「Apache以外」を選択してください(Nginx は Apache 系の証明書フォーマットを使用します)。
⚡ 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 の両方を同時に提供できます。クライアントは対応するアルゴリズムを自動選択します。