web-dev-qa-db-ja.com

TLS実装/ RFC解釈

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)
3
Leo

あなたのクライアントは正しいと思います。

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ロードバランサーでも発生するようであることに注意してください。 サーバーからサポートされている楕円曲線拡張を無効にする を参照してください。

4
Steffen Ullrich