6. 信頼された CA 表示
メモリ制限により少数の CA ルート鍵のみを所有する制約のあるクライアントは、繰り返されるハンドシェイク失敗を回避するために、所有するルート鍵をサーバーに示すことを望む場合があります。
所有する CA ルート鍵を示すために、クライアントは(拡張された)クライアント hello にタイプ「trusted_ca_keys」の拡張を含めることができます (MAY)。この拡張の「extension_data」フィールドには「TrustedAuthorities」を含める必要があります (SHALL)。ここで:
struct {
TrustedAuthority trusted_authorities_list<0..2^16-1>;
} TrustedAuthorities;
struct {
IdentifierType identifier_type;
select (identifier_type) {
case pre_agreed: struct {};
case key_sha1_hash: SHA1Hash;
case x509_name: DistinguishedName;
case cert_sha1_hash: SHA1Hash;
} identifier;
} TrustedAuthority;
enum {
pre_agreed(0), key_sha1_hash(1),
x509_name(2), cert_sha1_hash(3), (255)
} IdentifierType;
opaque DistinguishedName<1..2^16-1>;
ここで「TrustedAuthorities」は、クライアントが所有する CA ルート鍵識別子のリストを提供します。各 CA ルート鍵は、次のいずれかによって識別されます:
-
「pre_agreed」:CA ルート鍵 ID が提供されません。
-
「key_sha1_hash」:CA ルート鍵の SHA-1 ハッシュが含まれます。デジタル署名アルゴリズム (DSA) および楕円曲線デジタル署名アルゴリズム (ECDSA) 鍵の場合、これは「subjectPublicKey」値のハッシュです。RSA 鍵の場合、ハッシュは、初期の 0 値バイトなしのモジュラスのビッグエンディアンバイト文字列表現のハッシュです。(これは、他の環境で展開されている鍵ハッシュ形式をコピーします。)
-
「x509_name」:CA の DER エンコードされた X.509 DistinguishedName が含まれます。
-
「cert_sha1_hash」:CA ルート鍵を含む DER エンコードされた証明書の SHA-1 ハッシュが含まれます。
クライアントは、trusted_ca_keys 拡張に所有する CA ルート鍵の一部、すべて、または何も含めないことができることに注意してください。特定の CA ルート鍵を含めるかどうかの決定は、クライアントが CA ルート鍵に基づいて認証を実行する準備ができているかどうか、CA がサーバーに関連する証明書を発行するかどうか、またはそのルート鍵の使用に関連するハンドシェイクの既知の失敗モードがあるかどうかに基づく場合があります。
サーバーが「trusted_ca_keys」拡張を含むクライアント hello メッセージを受信した場合、拡張に含まれる情報を使用して、クライアントに送信する証明書の選択をガイドできます (MAY)。この場合、サーバーは(拡張された)サーバー hello にタイプ「trusted_ca_keys」の拡張を含める必要があります (SHALL)。この拡張の「extension_data」フィールドは空である必要があります (SHALL)。