メインコンテンツまでスキップ

1. はじめに

トランスポート層セキュリティ (TLS) プロトコル ([TLS1.0], [TLS1.1], [TLS1.2]) は、TLSの当初の設計時には想定されていなかったものを含む、ますます多様な運用環境で使用されています。この文書で導入される拡張は、保護されたデータが交換される前にクライアントとサーバーの間で認可情報を交換する必要がある環境でTLSが動作できるように設計されています。これらのTLS認可拡張の使用は、複数のアプリケーションプロトコルが同じ認可情報を利用できる場合に特に魅力的です。

これらの拡張で伝送される認可情報の形式と内容は拡張可能です。この文書では、セキュリティアサーションマークアップ言語 (SAML) アサーション ([SAML1.1], [SAML2.0]) およびX.509属性証明書 (AC) [ATTRCERT] 認可形式を参照していますが、他の形式も使用できます。将来の認可拡張には、信頼できる発行者によってデジタル署名された不透明なアサーションが含まれる可能性があります。証明書パス検証との類似性を認識して、この文書では証明書処理に関連するTLSアラートメッセージを使用して認可情報処理の失敗を報告することを推奨しています。

識別、認証、および認可情報がすべてTLS内で処理される場合、これらを暗号化されたセッションに直接バインドすることが可能です。各アプリケーションが一意の認可情報を必要とする場合、TLS保護されたアプリケーションプロトコル内で伝送するのが最善かもしれません。ただし、識別、認証、および認可情報が異なるプロトコル層で処理される場合は、適切なバインディングを確保するように注意する必要があります。

この文書では、TLS 1.0、TLS 1.1、およびTLS 1.2におけるTLSハンドシェイクプロトコルの認可拡張について説明します。これらの拡張は、最初に [TLSEXT1] で定義され、[TLSEXT2] で改訂されたTLS拡張用に定義された規約に従います。TLS拡張は現在TLS 1.2 [TLS1.2] の一部です。TLS拡張は、client helloメッセージとserver helloメッセージに汎用拡張メカニズムを使用します。この文書で説明されている拡張は、クライアントとサーバーの両方が望ましい認可データ型をサポートしていることを確認します。次に、サポートされている場合、認可情報は補足データハンドシェイクメッセージ [TLSSUPP] で交換されます。

認可拡張は、TLS 1.0、TLS 1.1、およびTLS 1.2と組み合わせて使用できます。拡張は下位互換性があるように設計されており、これはクライアントがclient helloメッセージでサポートを示し、サーバーがserver helloメッセージでサポートを示す場合にのみ、ハンドシェイクプロトコル補足データメッセージに特定のタイプの認可情報が含まれることを意味します。

クライアントは通常、確立されているTLSセッションのコンテキストを知っています。したがって、クライアントは必要なときに認可拡張を使用できます。サーバーは、サーバーがリストされているすべての拡張を「理解」していない場合でも、拡張されたclient helloメッセージを受け入れる必要があります。ただし、サーバーはこれらの「理解されていない」拡張のサポートを示しません。その後、クライアントは認可拡張をサポートしていないサーバーとの通信を拒否する可能性があります。

1.1. 規約

認可メッセージの構文は、[TLS1.0] のセクション4で規定されているTLSプレゼンテーション言語を使用して定義されています。

この文書のキーワード「MUST」、「MUST NOT」、「REQUIRED」、「SHALL」、「SHALL NOT」、「SHOULD」、「SHOULD NOT」、「RECOMMENDED」、「MAY」、および「OPTIONAL」は、RFC 2119 [STDWORDS] で説明されているように解釈されるものとします。

1.2. 概要

図1は、完全なTLSハンドシェイクにおける認可拡張と補足データメッセージの配置を示しています。

ClientHelloメッセージには、サポートされているクライアント認可データ形式の指示と、サポートされているサーバー認可データ形式の指示が含まれています。ServerHelloメッセージには同様の指示が含まれていますが、サーバーでサポートされていない認可データ形式は含まれていません。クライアントとサーバーの両方が認可データ型のサポートを示す必要があります。相互にサポートされている認可データ形式のリストが空の場合、ServerHelloメッセージは影響を受ける拡張をまったく含んではなりません。

成功したセッション再開は、元のセッションと同じ認可情報を使用します。

Client                                                   Server

ClientHello (w/ extensions) -------->

ServerHello (w/ extensions)
SupplementalData*
Certificate*
ServerKeyExchange*
CertificateRequest*
<-------- ServerHelloDone
SupplementalData*
Certificate*
ClientKeyExchange
CertificateVerify*
[ChangeCipherSpec]
Finished -------->
[ChangeCipherSpec]
<-------- Finished
Application Data <-------> Application Data

* オプションまたは状況依存のメッセージを示し、
常に送信されるわけではありません。

[] ChangeCipherSpecが独立したTLSプロトコルコンテンツタイプ
であることを示します。実際にはTLSハンドシェイクメッセージ
ではありません。

図1. 完全なTLSハンドシェイクにおける認可データ交換