公開鍵基盤において、証明書署名要求(CSR:Certificate Signing Request)は、
公開鍵証明書の発行を
認証局に申請する際に送信されるメッセージです。このプロセスは、デジタル証明書の信頼性を確保するために不可欠です。
CSRの生成
CSRを生成する前に、申請者はまず公開鍵と秘密鍵のペアを作成します。秘密鍵は厳重に保護される必要があります。CSRには、申請者を識別するための情報(例えば、
X.509証明書におけるディレクトリ名など)と、申請者が選択した公開鍵が含まれます。重要な点として、CSRには秘密鍵自体は含まれません。その代わりに、秘密鍵を用いてCSRに電子署名することで、CSRが改ざんされていないこと、そして申請者が確かにその秘密鍵の所有者であることを証明します。
認証局によるCSRの検証
認証局はCSRを受け取ると、まずその電子署名を検証します。これにより、CSRが改ざんされていないこと、そして申請者が対応する秘密鍵を所有していることを確認します。この検証を怠ると、秘密鍵を持たない公開鍵を認証してしまい、
公開鍵基盤全体とその利用者に深刻なセキュリティリスクをもたらす可能性があります。
認証局によっては、追加の資格証明や身元証明を要求することがあります。その場合、
認証局は申請者に連絡を取り、必要な情報を収集します。
認証局がCSRを承認すると、それに基づいて
公開鍵証明書を作成し、申請者に送り返します。この証明書には、
認証局の秘密鍵による電子署名が施されています。
認証局は、運用の都合上、CSRに含まれない情報を証明書に追加したり、公開鍵以外の情報を修正して証明書に記載することが可能です。
PKCS#10標準とCSRの符号化
PKCS#10標準は、
X.509証明書で使用されるCSRのバイナリ形式を定義しています。この標準はASN.1(
Abstract Syntax Notation One)で表現されます。OpenSSLなどのツールを使ってASN.1の構造を解析することができます。CSRは通常、
Base64で符号化された
PKCS#10形式で表現されます。
以下は、
Base64で符号化されたCSRの例です。
-BEGIN CERTIFICATE REQUEST
-
MIIBnTCCAQYCAQAwXTELMAkGA1UEBhMCU0cxETAPBgNVBAoTCE0yQ3J5cHRvMRIw
EAYDVQQDEwlsb2NhbGhvc3QxJzAlBgkqhkiG9w0BCQEWGGFkbWluQHNlcnZlci5l
eGFtcGxlLmRvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAr1nYY1Qrll1r
uB/FqlCRrr5nvupdIN+3wF7q915tvEQoc74bnu6b8IbbGRMhzdzmvQ4SzFfVEAuM
MuTHeybPq5th7YDrTNizKKxOBnqE2KYuX9X22A1Kh49soJJFg6kPb9MUgiZBiMlv
tb7K3CHfgw5WagWnLl8Lb+ccvKZZl+8CAwEAAaAAMA0GCSqGSIb3DQEBBAUAA4GB
AHpoRp5YS55CZpy+wdigQEwjL/wSluvo+WjtpvP0YoBMJu4VMKeZi405R7o8oEwi
PdlrrliKNknFmHKIaCKTLRcU59ScA6ADEIWUzqmUzP5Cs6jrSRo3NKfg1bd09D1K
9rsQkRc9Urv9mRBIsredGnYECNeRaK5R1yzpOowninXC
-END CERTIFICATE REQUEST
-
上記CSRのASN.1構造は、OpenSSLの`asn1parse`コマンドを使用することで解析できます。以下はその解析結果の一部です。
0:d=0 hl=4 l= 413 cons: SEQUENCE
4:d=1 hl=4 l= 262 cons: SEQUENCE
8:d=2 hl=2 l= 1 prim: INTEGER :00
11:d=2 hl=2 l= 93 cons: SEQUENCE
13:d=3 hl=2 l= 11 cons: SET
15:d=4 hl=2 l= 9 cons: SEQUENCE
17:d=5 hl=2 l= 3 prim: OBJECT :countryName
22:d=5 hl=2 l= 2 prim: PRINTABLESTRING :SG
26:d=3 hl=2 l= 17 cons: SET
28:d=4 hl=2 l= 15 cons: SEQUENCE
30:d=5 hl=2 l= 3 prim: OBJECT :organizationName
35:d=5 hl=2 l= 8 prim: PRINTABLESTRING :M2Crypto
45:d=3 hl=2 l= 18 cons: SET
47:d=4 hl=2 l= 16 cons: SEQUENCE
49:d=5 hl=2 l= 3 prim: OBJECT :commonName
54:d=5 hl=2 l= 9 prim: PRINTABLESTRING :localhost
65:d=3 hl=2 l= 39 cons: SET
67:d=4 hl=2 l= 37 cons: SEQUENCE
69:d=5 hl=2 l= 9 prim: OBJECT :emailAddress
80:d=5 hl=2 l= 24 prim: IA5STRING :
[email protected]
106:d=2 hl=3 l= 159 cons: SEQUENCE
109:d=3 hl=2 l= 13 cons: SEQUENCE
111:d=4 hl=2 l= 9 prim: OBJECT :rsaEncryption
122:d=4 hl=2 l= 0 prim: NULL
124:d=3 hl=3 l= 141 prim: BIT STRING
268:d=2 hl=2 l= 0 cons: cont [ 0 ]
270:d=1 hl=2 l= 13 cons: SEQUENCE
272:d=2 hl=2 l= 9 prim: OBJECT :md5WithRSAEncryption
283:d=2 hl=2 l= 0 prim: NULL
285:d=1 hl=3 l= 129 prim: BIT STRING
この構造は、CSRがどのような情報を含んでいるかを理解する上で役立ちます。例えば、`countryName`、`organizationName`、`commonName`、`emailAddress`などの識別情報や、公開鍵のアルゴリズムなどが含まれています。
まとめ
CSRは、
公開鍵基盤における重要なステップであり、
認証局が
公開鍵証明書を発行するための信頼できるリクエストです。適切なCSRの生成と検証は、安全な通信とデータ保護のために不可欠です。
参考情報
以下に、CSRのデコードと分析に役立つ外部リソースを記載します。
CSR Decoder - Base64で符号化されたCSRのデコードと分析
CSR Decoder - 上記と同様の機能、ただしOpenSSLに依存しない
これらのツールを使用することで、CSRの構造や内容をより深く理解することができます。