[4] [[TLS Handshake Protocol]] の [DFN[[CODE[[[CertificateRequest]]]]]]
[[メッセージ]]は、[[サーバー]]が[[クライアント]]に[[クライアント証明書]]を送信することを要求するものです。

* 仕様書

[REFS[
- [1] '''[CITE@en[RFC 5246 - The Transport Layer Security (TLS) Protocol Version 1.2]] ([TIME[2015-03-25 03:49:56 +09:00]] 版) <https://tools.ietf.org/html/rfc5246#section-7.4.4>'''
- [6] [CITE[RFC Errata Report]] ([TIME[2015-04-18 16:06:26 +09:00]] 版) <http://www.rfc-editor.org/errata_search.php?rfc=5246>
]REFS]

* 構文

[5] [CODE[[[CertificateRequest]]]] は、次の欄で構成されます [SRC[>>1]]。
[FIG(list members)[
:[CODE[[[certificate_types]]]]:1[[バイト]][[以上]]2[SUP[8]]-1[[バイト]][[以下]]の、
[[クライアント]]が利用できる[[クライアント証明書]]の種別を表す値
([CODE[[[ClientCertificateType]]]]) のリストです [SRC[>>1]]。
:[CODE[[[supported_signature_algorithms]]]]:2バイト[[以上]]2[SUP[16]]-2[[バイト]][[以下]]の、
[[サーバー]]が[[検証]]できる[[ハッシュアルゴリズム]]と[[署名アルゴリズム]]を表す値の組
([CODE[[[SignatureAndHashAlgorithm]]]]) の優先度[[降順]]リストです [SRC[>>1, >>6]]。
:[CODE[[[certificate_authorities]]]]:0[[バイト]][[以上]]2[SUP[16]]-1[[バイト]][[以下]]の、
[[サーバー]]が受け付けられる [[CA]] の [[DN]] を [[DER]] で[[符号化]]したもの
(1[[バイト]][[以上]]2[SUP[16]]-1[[バイト]][[以下]]の列) です [SRC[>>1]]。
[[ルートCA]]を指定しても、[[下位CA]]を指定しても構いません [SRC[>>1]]。
]FIG]

[10] [[楕円曲線暗号]]で拡張

* 文脈

[2] [[匿名]]でない[[サーバー]]は、選択した [[cipher suite]] において適切なら、
任意選択で[[クライアント]]に[[証明書]]を要求できます [SRC[>>1]]。

;; [9] [[匿名サーバー]]が[[クライアント認証]]を要求するのは、
[CODE[[[handshake_failure]]]] [[fatal alert]] です [SRC[>>1]]。

[3] [CODE[[[CertificateRequest]]]] [[メッセージ]]は、
[CODE[[[ServerKeyExchange]]]] [[メッセージ]] (送られない場合には[[サーバー]]からの
[CODE[[[Certificate]]]] [[メッセージ]]) の直後に[[サーバー]]から[[クライアント]]に送信します
[SRC[>>1]]。

* 処理

[7] [[クライアント]]は、 [CODE[[[certificate_authorities]]]] が空なら、
予め別途合意がある場合を除き、
[CODE[[[certificate_types]]]] に合致する任意の[[証明書]]を送って構いません [SRC[>>1]]。
