CSR(証明書署名要求)とは
CSR(Certificate Signing Request / 証明書署名要求)は、SSL/TLS証明書を認証局(CA)から取得するために提出するファイルです。CSRには公開鍵と組織情報が含まれており、CAはこれを検証した上で証明書を発行します。
CSRに含まれる情報:
- 公開鍵:サーバーの公開鍵
- Common Name (CN):証明書を使用するドメイン名
- Organization (O):組織名
- Organizational Unit (OU):部門名
- Locality (L):市区町村
- State (ST):都道府県
- Country (C):国コード(JPなど)
CSRの生成方法
基本的なCSR生成
# 秘密鍵とCSRを同時に生成
openssl req -new -newkey rsa:2048 -nodes \
-keyout server.key -out server.csr
# 対話形式での入力
# Country Name (2 letter code) [AU]: JP
# State or Province Name (full name) [Some-State]: Tokyo
# Locality Name (eg, city) []: Shibuya
# Organization Name (eg, company) []: Example Inc.
# Organizational Unit Name (eg, section) []: IT Department
# Common Name (e.g. server FQDN) []: www.example.com
# Email Address []: admin@example.com
非対話形式でのCSR生成
# -subj オプションで一括指定
openssl req -new -newkey rsa:2048 -nodes \
-keyout server.key -out server.csr \
-subj "/C=JP/ST=Tokyo/L=Shibuya/O=Example Inc./CN=www.example.com"
SAN(Subject Alternative Name)付きCSR
# 設定ファイル(san.cnf)
[req]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn
[dn]
C = JP
ST = Tokyo
L = Shibuya
O = Example Inc.
CN = www.example.com
[req_ext]
subjectAltName = @alt_names
[alt_names]
DNS.1 = www.example.com
DNS.2 = example.com
DNS.3 = api.example.com
# CSR生成
openssl req -new -key server.key -out server.csr -config san.cnf
AIエンジニアとしての実体験
AIサービスのAPI基盤を構築する際、ワイルドカード証明書のCSRを生成しました。サブドメインが動的に増えるマルチテナントアーキテクチャでは、ワイルドカード証明書が効率的です。
# ワイルドカード証明書用CSR
openssl req -new -newkey rsa:2048 -nodes \
-keyout wildcard.key -out wildcard.csr \
-subj "/C=JP/ST=Tokyo/O=AI Company/CN=*.example.com"
CSRの内容確認
# CSRの内容を人間が読める形式で表示
openssl req -in server.csr -noout -text
# CSRの内容確認(要約)
openssl req -in server.csr -noout -subject
# CSRに含まれる公開鍵の確認
openssl req -in server.csr -noout -pubkey
自社サーバー運用への応用
秘密鍵の安全な管理
CSR生成時に作成される秘密鍵は、サーバーに残しておき、絶対に外部に漏らさないようにします。認証局に送るのはCSRのみです。
# 秘密鍵のパーミッション設定
chmod 600 server.key
chown root:root server.key
鍵とCSRの一致確認
# 秘密鍵のmodulus
openssl rsa -noout -modulus -in server.key | openssl md5
# CSRのmodulus
openssl req -noout -modulus -in server.csr | openssl md5
# 発行された証明書のmodulus
openssl x509 -noout -modulus -in server.crt | openssl md5
# 3つのMD5ハッシュが一致すれば、鍵と証明書が対応している
関連ブログ記事
📝 関連記事
最新動向(2026年)
ACMEプロトコルによる自動化
Let's Encryptなどで使用されるACMEプロトコルでは、CSRの生成から証明書の取得まで自動化されています。手動でのCSR管理は減少傾向にありますが、EV証明書など一部では依然必要です。
楕円曲線暗号(ECC)の普及
# ECDSA鍵でのCSR生成
openssl ecparam -genkey -name prime256v1 -out server-ec.key
openssl req -new -key server-ec.key -out server-ec.csr \
-subj "/C=JP/ST=Tokyo/O=Example Inc./CN=www.example.com"
トラブル事例と対策
⚠️ 秘密鍵の紛失
問題:発行された証明書があっても秘密鍵がないと使用できない
対策:CSR生成時に秘密鍵を安全にバックアップ。紛失した場合は証明書を再発行
⚠️ CNの間違い
問題:Common Nameにタイポがあると証明書が使えない
対策:CSR生成前にドメイン名を二重確認。openssl req -in server.csr -noout -subjectで確認
