For TLS 1.3, the client hello record version is 0x0303 (TLS 1.2). If the server negotiates to TLS 1.3 (because 1.3 version is in the supported_version), do the application data records use 0x0304 as the version?

1 Answer 1


... do the application data records use 0x0304 as the version?

No. The standard (RFC 8446) is very clear what the version of the record layer should be, and this includes application records:

  struct {
      ContentType type;
      ProtocolVersion legacy_record_version;
      uint16 length;
      opaque fragment[TLSPlaintext.length];
  } TLSPlaintext

legacy_record_version: MUST be set to 0x0303 for all records generated by a TLS 1.3 implementation other than an initial ClientHello (i.e., one not generated after a HelloRetryRequest), where it MAY also be 0x0301 for compatibility purposes.

  • It seems like 0x0304 is only used in the server hello in the supported_versions field. Commented Sep 19, 2023 at 19:18
  • @user2233706: not quite; supported_versions is present (and required for 1.3) in ClientHello and ServerHello (including its HelloRetryRequest variant). But it is not in any subsequent message. The version field at the beginning of ClientHello and ServerHello/HRR messages (not records) is also 0x0303 (without the option for 0x0301 sometimes); see 4.1.2,4.1.3,4.1.4. Commented Sep 19, 2023 at 23:38

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .