0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

初めてのCSR作成

0
Last updated at Posted at 2026-04-02

はじめに

業務でSSL/TLS証明書を申請する機会があり、CSR(証明書署名要求)を自分で作成してCA認証局に提出する作業を担当しました。

CSRという単語は聞いたことがあったものの、実際に作るのは初めてだったので、仕組みから調べ直しました。この記事はそのときに調べたことのまとめです。

CSRとは何か、秘密鍵やCAとの関係、opensslコマンドでの具体的な作成手順まで、一通り書いています。同じように初めてCSRを作ることになった方の参考になれば幸いです。

そもそもCSRとは何か

CSRはCertificate Signing Request(証明書署名要求)の略で、CA(認証局)に「この内容で証明書を作ってください」と依頼するための申請書ファイルです。

SSL/TLS証明書を取得するまでの流れは、大きく3ステップあります。

  1. 自分で秘密鍵CSRを作成する
  2. CSRをCA認証局に提出する
  3. CAが署名した証明書が返ってくる

ここで重要なのは、「鍵を作るのは自分、署名するのはCA」という役割分担です。

秘密鍵・公開鍵・CA署名の関係

CSRの仕組みを理解するには、秘密鍵と公開鍵の関係を押さえておく必要があります。

秘密鍵を生成すると、そこから対応する公開鍵が自動的に導出されます。CSRにはこの公開鍵と、組織名やドメイン名などの情報が含まれています。

秘密鍵(自分だけが持つ)
  ↓ 導出
公開鍵 + 組織情報 + ドメイン名
  ↓ まとめたもの
CSR(認証局に送る)
  ↓ CAが署名
証明書(ブラウザに信頼される)

CAはCSRの内容を確認し、自身の秘密鍵で署名を行います。これが「証明書」です。ブラウザはCAの署名を検証することで、その証明書が正当なものかどうかを判断します。

つまり、自分で秘密鍵を作ること自体はオレオレ証明書と同じですが、署名するのが信頼されたCAであるという点が異なります。

秘密鍵を作るのは 署名するのは ブラウザに信頼される?
オレオレ証明書 自分 自分 いいえ
CA発行の証明書 自分 CA認証局 はい

プライベートCA と パブリックCA の違い

CA認証局には大きく分けて2種類あります。

パブリックCAは、Let's EncryptやDigiCertなどが該当します。これらのCAが発行した証明書は、ChromeやEdgeなどの主要ブラウザにルートCAとして事前登録されているため、誰がどの端末からアクセスしても信頼されます。

プライベートCAは、企業や組織が独自に運用するCAです。社内のルートCA証明書がインストールされた端末からは信頼されますが、それ以外の端末からアクセスするとブラウザに「この接続は安全ではありません」という警告が表示されます。

どちらを選ぶかは、証明書を使うサービスに誰がアクセスするかで決まります。

CA種別 信頼される範囲 ユースケース
パブリックCA インターネット上の全端末 一般公開するWebサイト
プライベートCA CA証明書をインストール済みの端末のみ 社内システム、VPN経由のアクセス

社内専用のシステムであればプライベートCAで十分です。一方、社外のユーザーもアクセスするサービスであればパブリックCAが必要になります。

CSRの作成手順自体は、どちらのCAに提出する場合も同じです。

SANとワイルドカード証明書

1枚の証明書で複数のドメインをカバーしたい場合、SANワイルドカードの2つの仕組みを使います。

SAN(Subject Alternative Name)

SANは、1枚の証明書に複数のドメイン名を登録する仕組みです。たとえば、以下の3つのドメインを1枚の証明書でカバーできます。

DNS.1 = app.example.com
DNS.2 = api.example.com
DNS.3 = admin.example.com

CSRを作成する際にSANを指定しておくと、CAが発行する証明書にもそのSANが含まれます。

ワイルドカード証明書

ワイルドカード証明書は、*.example.com のようにアスタリスクを使って、同一階層のサブドメインをまとめてカバーする証明書です。

*.example.com であれば、app.example.comapi.example.com など、任意のサブドメインに対応できます。

ただし、ワイルドカードが有効なのは1階層分だけです。*.example.comsub.app.example.com のような2階層のサブドメインにはマッチしません。階層が異なるドメインをカバーする必要がある場合は、SANで複数のワイルドカードを登録します。

DNS.1 = *.example.com
DNS.2 = *.app.example.com
DNS.3 = *.admin.example.com

SANに含められるドメイン数はCA認証局によって上限が異なるため、CSR作成前に確認しておくと安心です。
このあたりごっちゃになりそうですが、SANは「招待者名簿」でワイルドカードは「リストへの書き方の一つ」と覚えるとよいかもしれません。

CSR作成の手順

ここからは、opensslコマンドを使ってCSRを作成する具体的な手順を説明します。

今回は以下の要件を想定します。

  • RSA 2048bitの秘密鍵
  • ワイルドカード証明書
  • SANで複数ドメインをカバー

Step 1: 秘密鍵の生成

まず、RSA 2048bitの秘密鍵を生成します。

openssl genrsa -out server.key 2048

このコマンドで server.key というファイルが作成されます。この秘密鍵は証明書とペアで使うものなので、紛失すると証明書が使えなくなります。安全な場所に保管してください。

Step 2: 設定ファイルの作成

CSRに含める情報を設定ファイル(CNF形式)にまとめます。

[req]
default_bits       = 2048
prompt             = no
default_md         = sha256
req_extensions     = v3_req
distinguished_name = dn

[dn]
C  = JP
ST = Tokyo
L  = Chiyoda
O  = Example Corp
OU = Engineering
CN = *.example.com

[v3_req]
subjectAltName = @alt_names

[alt_names]
DNS.1 = *.example.com
DNS.2 = *.app.example.com
DNS.3 = *.admin.example.com

各項目の意味は以下のとおりです。

[dn] セクション(組織情報)

項目 意味
C 国コード(2文字) JP
ST 都道府県 Tokyo
L 市区町村 Chiyoda
O 組織名 Example Corp
OU 部署名 Engineering
CN コモンネーム(主ドメイン) *.example.com

[alt_names] セクション(SAN)

カバーしたいドメインを DNS.1, DNS.2, ... と列挙します。CNに指定したドメインもSANに含めておくのが一般的です。

この設定ファイルを csr.cnf として保存します。

Step 3: CSRの生成

秘密鍵と設定ファイルを指定してCSRを生成します。

openssl req -new -key server.key -out server.csr -config csr.cnf

server.csr が作成されます。これがCA認証局に提出するファイルです。

Step 4: 内容の確認

提出前にCSRの中身を確認しておきます。

openssl req -text -noout -in server.csr

出力から、以下の項目が意図どおりか確認します。

  • Subject: 組織名やCNが正しいか
  • Subject Alternative Name: SANに必要なドメインが全て含まれているか
  • Public-Key: 鍵長が2048bitか
Subject: C=JP, ST=Tokyo, L=Chiyoda, O=Example Corp, OU=Engineering, CN=*.example.com
...
X509v3 Subject Alternative Name:
    DNS:*.example.com, DNS:*.app.example.com, DNS:*.admin.example.com

この内容に問題がなければ、CSRの作成は完了です。

CSRを作成したら

CSRを作成したあとの流れと、注意点をまとめます。

CAに提出するもの・しないもの

ファイル 内容 CAに送る?
server.csr 証明書署名要求 送る
server.key 秘密鍵 絶対に送らない

CSRには公開鍵が含まれていますが、秘密鍵は含まれていません。CAが必要とするのはCSRだけです。秘密鍵を外部に送る必要は一切ありません。

秘密鍵の保管

秘密鍵を紛失すると、CAから証明書が返ってきても使えません。CSR作成からやり直しになります。

ローカルのファイルシステムに置いたままだとPCの故障やクリーンアップで消える可能性があるため、AWS Secrets ManagerやHashiCorp Vaultなどのシークレット管理サービスに保管しておくことをお勧めします。

証明書が返ってきたら

CAから署名済みの証明書ファイル(.crt や .pem)が届きます。この証明書を秘密鍵とペアでWebサーバーやロードバランサーに設定すれば、HTTPS通信が有効になります。

秘密鍵(server.key)  +  証明書(server.crt)
        ↓
  Webサーバーに設定 → HTTPS有効化

まとめ

CSR作成の流れを振り返ります。

  1. openssl genrsa で秘密鍵を生成する
  2. 組織情報とSANを記載した設定ファイル(CNF)を作成する
  3. openssl req でCSRを生成する
  4. CSRの中身を確認し、CAに提出する
  5. 秘密鍵は送らずに安全な場所で保管する

やっていることは「CAへの申請書を作る」だけです。opensslコマンド3つで完了するので、一度やってしまえば次回からは迷わないと思います。

CAの種類(パブリック/プライベート)やSANの構成は環境によって異なりますが、CSRの作成手順自体は共通です。この記事が初めてCSRを作る方の参考になれば幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?