コンテンツにスキップ

CSR(証明書署名要求)

CSR(Certificate Signing Request)は、 CA へ 証明書 の発行を要求するための署名付きデータ。

一般にPKCS #10形式が使用される。


CSRには主に次の情報が含まれる。

  • Subject
  • 公開鍵
  • 要求するX.509拡張
  • 対応する秘密鍵で作成したCSR自身の署名
Subject
公開鍵
拡張要求
↓
申請者の秘密鍵で署名

CSR自身の署名により、CSRが改変されていないことと、申請者が公開鍵に対応する秘密鍵を保持していることを確認できる。


CSRにはCAの署名、証明書のシリアル番号、最終的な有効期間などがないため、証明書としては使用できない。

CSR
↓ CAが内容を確認
↓ CA秘密鍵で署名
証明書
CSR 証明書
発行を要求するデータ CAが発行したデータ
申請者の秘密鍵でCSR自身へ署名 Issuerの秘密鍵で署名
公開鍵と要求内容を含む 公開鍵、用途、制約、有効期間などを含む
Trust Storeからは信頼されない 証明書チェーン によって検証される

CSRのSubjectは、証明書の対象として要求するDistinguished Nameである。

/C=JP/ST=Tokyo/L=Shinjuku/O=JEC/OU=CC/CN=www.example.com

CAはこの値を確認し、必要に応じて変更または拒否できる。CSRに書かれている値が、そのまま証明書になるとは限らない。


CSRはSANなどの X.509拡張 を要求できる。

Terminal window
openssl req -new \
-key server.key \
-out server.csr \
-addext "subjectAltName=DNS:www.example.com"

作成:

Terminal window
openssl req -new \
-key server.key \
-out server.csr

内容と自己署名の確認:

Terminal window
openssl req \
-in server.csr \
-text \
-verify \
-noout

-verify はCSR自身の署名を検証する。CAによる証明書チェーンの検証ではない。


CSRはCAへ渡してよいが、秘密鍵は渡さない。

CAへ渡す server.csr
手元に保持する server.key


  • RFC 2986 PKCS #10証明書署名要求の構文。
  • openssl-req CSRの作成、表示、自己署名の検証、拡張要求。