CSR を確認する手順
-----BEGIN CERTIFICATE REQUEST-----から対応する END 行までのリクエストを貼り付けるか、.csr/.reqファイルをボックスにドロップします。- カードの サブジェクト、サブジェクト代替名(SAN)、公開鍵 を確認します。
- 必要なら、CSR の下に秘密鍵も貼り付けます。そのカードには鍵の種類とサイズ、そして CSR のものと比べられる SPKI SHA-256 ピン だけが表示されます。
- CA のポータルが別の形式でリクエストを求める場合は、PEM をコピー か .der をダウンロード を使います。
証明書署名要求の中身
CSR(PKCS#10)は小さなものです。サブジェクト名、公開鍵、任意の属性、そしてそれら全体に対する署名からなります。デコーダーは次のように一覧表示します。
| フィールド | 補足 |
|---|---|
| サブジェクト | C=US, O=Example Corp, CN=app.example.com。ドメイン認証の証明書では、CA は検証した内容しか残さないため、組織のフィールドは通常削除されます。 |
| バージョン | PKCS#10 では常に v1。 |
| 公開鍵 | 種類とサイズ。例:RSA 2048、EC P-256。この部分は変更されずにそのまま証明書に入ります。 |
| 署名アルゴリズム | 通常は sha256WithRSAEncryption か ecdsa-with-SHA256。 |
| サブジェクト代替名(SAN)、鍵用途、拡張鍵用途 | 要求された拡張。CA はこれを受け入れることも、書き換えることも、削除することもあります。 |
| 属性 | その他の PKCS#9 属性。challengePassword は設定済みと表示し、値は非表示にします。 |
| SPKI SHA-256 ピン | 公開鍵のハッシュ。発行される証明書も同じピンになります。 |
提出前に見つけておきたい誤り
- サブジェクト代替名がない。 ブラウザはホスト名の照合で CN を無視します。パブリック CA はたいてい CN を SAN にコピーしてくれますが、社内 CA ではそうしないことが多く、名前の不一致で失敗する証明書ができてしまいます。
- 名前が足りない。
www.example.comとexample.comは別のエントリです。ワイルドカード*.example.comはexample.com自体をカバーしません。 - 鍵が小さすぎる。 公的に信頼された CA は 2048 ビット以上の RSA を要求します。RSA 1024 の CSR は拒否されます。
- 鍵が違う。 別のサーバーで生成した CSR や古い鍵ファイルから作った CSR からは、自分のサーバーで使えない証明書ができます。ピンを比べてください。
- サブジェクトの誤字。 今なら簡単に直せますが、OV や EV の審査が済んだ後では高くつきます。
ツールは CSR を読み取りますが、その自己署名は確認しません。途中で切れたり編集されたりしたリクエストでもデコードできてしまうので、疑わしいときは openssl req -verify を実行してください。
OpenSSL で CSR を作成・検証する
新しい RSA 鍵と、2 つのホスト名を含む CSR を 1 回で作ります(-addext には OpenSSL 1.1.1 以降が必要です)。
openssl req -new -newkey rsa:2048 -nodes -keyout app.key -out app.csr \
-subj "/CN=app.example.com" \
-addext "subjectAltName=DNS:app.example.com,DNS:www.app.example.com"
署名も含めて確認し、鍵と対応しているかを確かめます。
openssl req -in app.csr -noout -text -verify
diff <(openssl req -in app.csr -noout -pubkey) <(openssl pkey -in app.key -pubout) && echo "key matches"
リクエストが無傷なら、-verify の行は Certificate request self-signature verify OK と出力します。コマンドラインのレシピは OpenSSL のページ にもっとあります。
Base64 で見た CSR
CSR は証明書と同じく、DER を PEM で包んだものです。RSA-2048 のリクエストは DER でおよそ 650〜700 バイトなので、その Base64 は MIIC で始まります。EC P-256 のリクエストは 300 バイト前後で、MIIB で始まります。受け取ったものが MIIC で始まっていてもヘッダーが CERTIFICATE なら、それは証明書です。その場合は 証明書デコーダー に貼り付けてください。同じウィジェットがどちらも扱い、どちらが見つかったかを表示します。
よくある質問
CSR にどのドメインが入っているか確認するには?
CSR を貼り付けて サブジェクト代替名(SAN) を見てください。証明書がどのホスト名を対象にするかは、この一覧で決まります。ブラウザはサブジェクトの CN を無視します。この行がなければ、リクエストに SAN 拡張は含まれていません。
CSR が自分の秘密鍵と対応しているかどうかを確かめるには?
CSR と秘密鍵を一緒に貼り付けます。両方のカードに同じ SPKI SHA-256 ピン が表示されれば、同じ鍵ペアです。OpenSSL なら、openssl req -in app.csr -noout -pubkey と openssl pkey -in app.key -pubout の出力を比べます。
CSR に秘密鍵は含まれていますか?
含まれていません。CSR に入っているのは、公開鍵、要求する名前、そして秘密鍵を持っていることを証明するためにその秘密鍵で作った署名です。CA に送っても安全で、秘密鍵はサーバーに置いたままにしておくべきです。
ヘッダーの NEW CERTIFICATE REQUEST とは何ですか?
Java の keytool や一部の Windows ツールが使う古いラベルです。中身は同じ PKCS#10 の構造で、デコーダーはほかの CSR と同じように読み取ります。