Server HelloはRFCに違反していますか? RFCには矛盾があるようです。
お客様は、デバイス(Citrix Netscaler)が要求しない場合、拡張機能(ec_point_formats:ECポイント形式:非圧縮)を返すと主張しています。このため、彼らは私たちのデバイスがRFCに準拠していないと主張しています。
RFCから、次の2つの関連セクションが見つかります。拡張機能:
rfc3546秒2.3を参照してください。こんにちは拡張機能
Note that for all extension types (including those defined in
future), the extension type MUST NOT appear in the extended server
hello unless the same extension type appeared in the corresponding
client hello. Thus clients MUST abort the handshake if they receive
an extension type in the extended server hello that they did not
request in the associated (extended) client hello.
rfc4492および8422秒4段落3:
The client MUST NOT include these extensions in the ClientHello
message if it does not propose any ECC cipher suites. A client that
proposes ECC cipher suites may choose not to include these
extensions. In this case, the server is free to choose any one of
the elliptic curves or point formats listed in Section 5. That
section also describes the structure and processing of these
extensions in greater detail.
パケットトレース:
クライアントこんにちは:
TLSv1.2 Record Layer: Handshake Protocol: Client Hello
Content Type: Handshake (22)
Version: TLS 1.2 (0x0303)
Length: 63
Handshake Protocol: Client Hello
Handshake Type: Client Hello (1)
Length: 59
Version: TLS 1.2 (0x0303)
Random
Session ID Length: 0
Cipher Suites Length: 20
Cipher Suites (10 suites)
Compression Methods Length: 1
Compression Methods (1 method)
サーバーこんにちは:
TLSv1.2 Record Layer: Handshake Protocol: Server Hello
Content Type: Handshake (22)
Version: TLS 1.2 (0x0303)
Length: 82
Handshake Protocol: Server Hello
Handshake Type: Server Hello (2)
Length: 78
Version: TLS 1.2 (0x0303)
Random
Session ID Length: 32
Session ID: bfe64de5d94a7c4c12bdb419b6938efcbb70429cd216fa1c...
Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)
Compression Method: null (0)
Extensions Length: 6
Extension: ec_point_formats
Type: ec_point_formats (0x000b)
Length: 2
EC point formats Length: 1
Elliptic curves point formats (1)
EC point format: uncompressed (0)
あなたのクライアントは正しいと思います。
RFC4492とそのフォローアップRFC8422は、この拡張機能がec_point_formats
を送信するクライアントへの応答であることを明確に示しています。つまり、クライアントがec_point_formats
を送信していないはずです。代わりに、クライアントがec_point_formats
を送信していない場合、サーバーは、クライアントが非圧縮ポイント形式のみをサポートしていると想定する必要があります。実際、RFC 8422では、非圧縮のポイント形式を除くすべてが廃止されているため、クライアントがこの拡張機能を含めないことはまったく問題ありません。 RFC 84225.1.2から引用します。サポートされているポイントフォーマット拡張 :
この仕様は、非圧縮ポイント形式を除くすべてを非推奨にします。 ...下位互換性のために、ポイント形式リスト拡張[〜#〜] may [〜#〜]は引き続き含まれ、圧縮されていないポイント形式(0)という1つの値のみが含まれます。 RFC 4492は、この拡張機能がない場合と指定しました。これは、非圧縮ポイント形式のみがサポートされることを意味します。したがって、非圧縮形式をサポートする実装との相互運用性は、拡張機能の有無にかかわらず機能するはずです。
そして RFC 84225.2。 Server Hello Extension は、ServerHelloのec_point_formats
拡張子は、ClientHelloのec_point_formats
拡張子への応答としてのみ送信する必要があることを明確にしています。つまり、そのような拡張子なしで送信しないでください。 ClientHelloで、したがってサーバーの動作が正しくありません。
この拡張機能が送信されるとき:
サポートされているポイントフォーマット拡張機能は、ServerHelloメッセージに含まれていますサポートされているポイントフォーマット拡張機能を含むClientHelloメッセージへの応答 ECC暗号スイートのネゴシエーション時。
あなたが説明する同様の問題は、古いバージョンのF5ロードバランサーでも発生するようであることに注意してください。 サーバーからサポートされている楕円曲線拡張を無効にする を参照してください。