証明書署名要求

公開鍵基盤における**証明書署名要求** () とは、公開鍵証明書の発行を申し込むために申請者から認証局へ送られるメッセージのことである。

CSRを作成する前に、申請者はまず公開鍵と秘密鍵の鍵対を生成し、秘密鍵を秘匿する。CSRには (X.509証明書の場合はディレクトリ名などの) 申請者を識別する情報と、申請者によって選択された公開鍵が含まれる。対応する秘密鍵はCSRに含まれないが、これを用いてCSRに対する電子署名を与えることにより、CSRが改ざんされていないこと、および申請者が間違いなく秘密鍵を所有していることを主張する。

認証局はCSRを受領すると、その署名を検証することによりCSRに改ざんがなく、かつ正しい秘密鍵が存在することを必ず確認する。これを怠ると、秘密鍵が存在しない公開鍵を承認してしまい、公開鍵基盤およびその利用者に対する攻撃を許してしまう。認証局によっては他の資格証明や身元証明が必要となることがあり、認証局が追加情報を得るために申請者へ連絡を取ることがある。

認証局がCSRを承認すると、これに基づいて公開鍵証明書を制作し、申請者へ送り返す。この証明書は認証局の秘密鍵で電子署名されている。認証局はその運用の都合上、CSRに含まれない情報を証明書に追加したり、公開鍵を除くCSR上の情報を修正して証明書に記載することができる。

10標準はX.509で使うCSRを符号化するためのバイナリ形式を定義している。PKCS#10はASN.1で表現される。以下は
OpenSSLを使ってASN.1の構造を調べる方法の例である。

`openssl asn1parse -in ''your_request''`

CSRはBase64で符号化されたPKCS#10として表現されることがある。その例は以下の通り。

```
-----BEGIN CERTIFICATE REQUEST-----
MIIBnTCCAQYCAQAwXTELMAkGA1UEBhMCU0cxETAPBgNVBAoTCE0yQ3J5cHRvMRIw
EAYDVQQDEwlsb2NhbGhvc3QxJzAlBgkqhkiG9w0BCQEWGGFkbWluQHNlcnZlci5l
eGFtcGxlLmRvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAr1nYY1Qrll1r
uB/FqlCRrr5nvupdIN+3wF7q915tvEQoc74bnu6b8IbbGRMhzdzmvQ4SzFfVEAuM
MuTHeybPq5th7YDrTNizKKxOBnqE2KYuX9X22A1Kh49soJJFg6kPb9MUgiZBiMlv
tb7K3CHfgw5WagWnLl8Lb+ccvKZZl+8CAwEAAaAAMA0GCSqGSIb3DQEBBAUAA4GB
AHpoRp5YS55CZpy+wdigQEwjL/wSluvo+WjtpvP0YoBMJu4VMKeZi405R7o8oEwi
PdlrrliKNknFmHKIaCKTLRcU59ScA6ADEIWUzqmUzP5Cs6jrSRo3NKfg1bd09D1K
9rsQkRc9Urv9mRBIsredGnYECNeRaK5R1yzpOowninXC
-----END CERTIFICATE REQUEST-----
```


上記CSRの (opensslによって解析された) ASN.1構造は以下の通り。

```
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         :admin@server.example.dom
  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
```

(これはBase64符号化されたCSRをコマンド`openssl asn1parse -inform PEM -i`に与えることで生成されたもの。ここでPEMはPrivacy-enhanced mailの略であり、ASN.1のDistinguished Encoding Rules (DER) による符号化をbase64形式で記述したものである)

## 外部リンク
*CSR Decoder &mdash; Base64で符号化されたCSRのデコードと分析に使える。
*CSR Decoder &mdash; 同上 - ただしOpenSSLに基づかない。