CSR(Certificate Signing Request)は、SSL証明書を申請するために認証局(CA)に送信するエンコードされたデータのブロックです。公開鍵とドメイン情報が含まれています。認証局はこれを使用して証明書を作成します。
CSRの中身
| フィールド | 例 | 必須? |
|---|---|---|
| Common Name (CN) | example.com | はい |
| 公開鍵 | RSAまたはECDSA公開鍵 | はい |
| 鍵アルゴリズム | ECDSA P-256またはRSA 2048 | はい |
| 組織名 | Your Company LLC | DVではオプション |
| 国 | US | DVではオプション |
| SAN | www.example.com、api.example.com | マルチドメイン用 |
DV証明書(Let’s Encryptなど)の場合、ドメイン名と公開鍵のみが重要です。組織フィールドは無視されます。
CSR生成の仕組み
- 鍵ペアを生成 — 秘密鍵と公開鍵
- CSRを構築 — 公開鍵 + ドメイン情報を標準化された形式(PKCS#10)にエンコード
- CSRに署名 — 秘密鍵で署名(対応する秘密鍵を持っていることを証明)
- 認証局に送信 — 認証局がドメイン所有権を検証し、CSRを使用して証明書を作成
秘密鍵はシステムを離れません。CSRには公開鍵のみが含まれます。
GetHTTPSはCSRを自動処理する
従来のツールでは、OpenSSLでCSRを手動生成する必要がありました:
# 手動の方法(GetHTTPSでは不要)
openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:P-256 \
-keyout privkey.pem -out csr.pem -nodes \
-subj "/CN=example.com"
GetHTTPSでは、CSRを見たり触れたりする必要はありません。ツールが:
- ブラウザ内で鍵ペアを生成(Web Crypto API)
- ドメイン入力からCSRを自動構築
- ACMEフローの一部としてLet’s Encryptに送信
- 署名された証明書をダウンロード提供
CSRは内部ステップです — ドメインを入力するだけで証明書が得られます。
CSRを手動で生成する(必要な場合)
スタンドアロンのCSRが必要な場合(商用認証局向け、またはアップロードを要求するプラットフォーム向け):
ECDSA P-256(推奨)
openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:P-256 \
-keyout privkey.pem -out csr.pem -nodes \
-subj "/CN=example.com"
RSA 2048
openssl req -new -newkey rsa:2048 \
-keyout privkey.pem -out csr.pem -nodes \
-subj "/CN=example.com"
複数ドメイン(SAN)あり
openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:P-256 \
-keyout privkey.pem -out csr.pem -nodes \
-subj "/CN=example.com" \
-addext "subjectAltName=DNS:example.com,DNS:www.example.com"
CSRの検証
openssl req -in csr.pem -noout -text
これにより、CSRに埋め込まれたドメイン名、鍵アルゴリズム、鍵サイズが表示されます。
ACMEプロトコルにおけるCSR
ACMEプロトコル(Let’s Encryptが使用)では、CSRはファイナライズステップで送信されます — ドメイン検証が通過した後です。認証局はCSRの公開鍵を使用して証明書を構築します。CSR形式はPKCS#10で、ACMEのJSONメッセージ内でbase64urlとしてエンコードされます。
GetHTTPSでは、このプロセス全体がWeb Crypto APIとpkijsライブラリを使用してJavaScriptで行われます。生のCSRバイトを見ることはありません。
よくある質問
CSRファイルを保管する必要がありますか?
いいえ。CSRは証明書のリクエスト中にのみ使用されます。認証局が証明書を発行した後、CSRは役目を終えます。秘密鍵と証明書を保管してください — CSRは破棄できます。
更新時にCSRを再利用できますか?
技術的には可能ですが、更新ごとに新しい鍵ペアとCSRを生成する方が良いです。鍵のローテーションの原則に従い、鍵が侵害された場合の露出を制限します。
CSRと証明書の違いは何ですか?
CSRはリクエストです — 公開鍵を含み、認証局に署名を求めます。証明書は結果です — 公開鍵があなたのドメインに属するという認証局の署名付き声明です。CSRは入力、証明書は出力です。
ワイルドカードドメインのCSRを生成できますか?
はい。Common Nameに*.example.comを使用します:
openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:P-256 \
-keyout privkey.pem -out csr.pem -nodes \
-subj "/CN=*.example.com"
GetHTTPSではCSRを手動生成する必要はありません — ドメインとして*.example.comを入力すれば、GetHTTPSがCSRを自動処理します。
CSRの「key usage」とは何ですか?
鍵用途の拡張は証明書の使用目的を指定します — TLS証明書では通常「Digital Signature」と「Key Encipherment」です。GetHTTPSとほとんどのACMEクライアントはこれらをデフォルトで正しく設定します。商用認証局の特定の要件に対して手動でCSRを生成する場合のみ、鍵用途を気にする必要があります。