4. TLS Client and Server Handshake Behavior (TLS クライアントとサーバーのハンドシェイク動作)
4. TLS Client and Server Handshake Behavior (TLS クライアントとサーバーのハンドシェイク動作)
この仕様は、[RFC5246] で定義された拡張手順に従って、ClientHello および ServerHello メッセージを拡張します。他の TLS メッセージを拡張または変更しません。
注:生の公開鍵を使用するために新しい暗号スイートは必要ありません。定義された拡張と互換性のある鍵交換方法をサポートする既存のすべての暗号スイートを使用できます。
図 5 の高レベルメッセージ交換は、クライアントおよびサーバー hello メッセージに追加された client_certificate_type および server_certificate_type 拡張を示しています。
client_hello,
client_certificate_type,
server_certificate_type ->
<- server_hello,
client_certificate_type,
server_certificate_type,
certificate,
server_key_exchange,
certificate_request,
server_hello_done
certificate,
client_key_exchange,
certificate_verify,
change_cipher_spec,
finished ->
<- change_cipher_spec,
finished
Application Data <-------> Application Data
Figure 5: Basic Raw Public Key TLS Exchange (Figure 5: 基本的な生の公開鍵 TLS 交換)
4.1. Client Hello (Client Hello)
生の公開鍵のサポートを示すために、クライアントは拡張 client hello メッセージに client_certificate_type および/または server_certificate_type 拡張を含めます。hello 拡張メカニズムは、TLS 1.2 [RFC5246] のセクション 7.4.1.4 で説明されています。
client hello の client_certificate_type 拡張は、certificate_request メッセージを使用して要求されたときに、クライアントがサーバーに提供できる証明書タイプを示します。
client hello の server_certificate_type 拡張は、後続の証明書ペイロードでサーバーによって提供されたときに、クライアントが処理できる証明書の種類を示します。
client hello で送信される client_certificate_type および server_certificate_type 拡張はそれぞれ、クライアントの優先順位でソートされたサポートされる証明書タイプのリストを運びます。クライアントが1つの証明書タイプのみをサポートする場合、それは単一の要素を含むリストです。
TLS クライアントは、certificate_request メッセージを使用して要求されたときにサーバーに提供できる対応する生の公開鍵または証明書を持っていない場合、または特定の TLS サーバーで使用するように構成されていない場合、client hello の client_certificate_type 拡張から証明書タイプを省略しなければなりません (MUST)。クライアントが client hello で送信する他の証明書タイプ(デフォルトの X.509 タイプ以外)を持っていない場合、client hello の client_certificate_type 拡張を省略しなければなりません (MUST)。
TLS クライアントは、対応する生の公開鍵または他の証明書タイプを処理できない場合、client hello の server_certificate_type 拡張から証明書タイプを省略しなければなりません (MUST)。クライアントが client hello で送信する他の証明書タイプ(デフォルトの X.509 証明書タイプ以外)を持っていない場合、client hello から server_certificate_type 拡張全体を省略しなければなりません (MUST)。
4.2. Server Hello (Server Hello)
サーバーが client_certificate_type 拡張および/または server_certificate_type 拡張を含む client hello を受信した場合、次の3つの結果が考えられます。
-
サーバーはこのドキュメントで定義されている拡張をサポートしていません。この場合、サーバーはこのドキュメントで定義されている拡張なしで server hello を返します。
-
サーバーはこのドキュメントで定義されている拡張をサポートしていますが、クライアントと共通の証明書タイプを持っていません。その後、サーバーはタイプ "unsupported_certificate" の致命的なアラートでセッションを終了します。
-
サーバーはこのドキュメントで定義されている拡張をサポートしており、クライアントと少なくとも1つの共通の証明書タイプを持っています。この場合、以下で説明する処理ルールに従います。
client hello の client_certificate_type 拡張は、certificate_request メッセージを使用して要求されたときに、クライアントがサーバーに提供できる証明書タイプを示します。TLS サーバーがクライアントに証明書を要求する場合(certificate_request メッセージを介して)、server hello に client_certificate_type 拡張を含めなければなりません (MUST)。server hello のこの client_certificate_type 拡張は、後続の証明書ペイロードで提供するようにクライアントに要求される証明書のタイプを示します。client_certificate_type 拡張で伝達される値は、client hello で送信された client_certificate_type 拡張で提供された値の1つから選択されなければなりません (MUST)。サーバーは、server hello メッセージに certificate_request ペイロードも含めなければなりません (MUST)。
サーバーが certificate_request ペイロードを送信しない場合(たとえば、クライアント認証がアプリケーション層で行われるか、クライアント認証が必要ないため)、またはクライアントがサポートする証明書(client hello の client_certificate_type 拡張で示されている)のいずれもサーバーがサポートする証明書タイプと一致しない場合、server hello の client_certificate_type ペイロードは省略されなければなりません (MUST)。
client hello の server_certificate_type 拡張は、後続の証明書ペイロードでサーバーによって提供されたときに、クライアントが処理できる証明書の種類を示します。client hello が server_certificate_type 拡張での生の公開鍵のサポートを示し、サーバーが生の公開鍵を使用することを選択した場合、TLS サーバーは SubjectPublicKeyInfo 構造体を Certificate ペイロードに配置しなければなりません (MUST)。server hello の server_certificate_type 拡張を使用して、TLS サーバーは Certificate ペイロードで運ばれる証明書タイプを示します。この追加の指示により、Certificate ペイロードに X.509 証明書または SubjectPublicKeyInfo 構造体が含まれる可能性があるため、解析のあいまいさを回避できます。server hello で運ばれる場合、server_certificate_type 拡張では単一の値のみが許可されることに注意してください。
4.3. Client Authentication (クライアント認証)
TLS サーバーが client_certificate_type として RawPublicKey を指定した場合、TLS クライアントから TLS サーバーへの認証は、帯域外メソッドによる受信したクライアント SubjectPublicKeyInfo の認証を介してのみサポートされます。
4.4. Server Authentication (サーバー認証)
TLS サーバーが server_certificate_type として RawPublicKey を指定した場合、TLS サーバーから TLS クライアントへの認証は、帯域外メソッドによる受信したクライアント SubjectPublicKeyInfo の認証を介してのみサポートされます。