target = "https://tools.ietf.org/rfc/rfc8446#4" # 4. Handshake Protocol # # The handshake protocol is used to negotiate the security parameters # of a connection. Handshake messages are supplied to the TLS record # layer, where they are encapsulated within one or more TLSPlaintext or # TLSCiphertext structures which are processed and transmitted as # specified by the current active connection state. # # enum { # client_hello(1), # server_hello(2), # new_session_ticket(4), # end_of_early_data(5), # encrypted_extensions(8), # certificate(11), # certificate_request(13), # certificate_verify(15), # finished(20), # key_update(24), # message_hash(254), # (255) # } HandshakeType; # # struct { # HandshakeType msg_type; /* handshake type */ # uint24 length; /* remaining bytes in message */ # select (Handshake.msg_type) { # case client_hello: ClientHello; # case server_hello: ServerHello; # case end_of_early_data: EndOfEarlyData; # case encrypted_extensions: EncryptedExtensions; # case certificate_request: CertificateRequest; # case certificate: Certificate; # case certificate_verify: CertificateVerify; # case finished: Finished; # case new_session_ticket: NewSessionTicket; # case key_update: KeyUpdate; # }; # } Handshake; # # Protocol messages MUST be sent in the order defined in Section 4.4.1 # and shown in the diagrams in Section 2. A peer which receives a # handshake message in an unexpected order MUST abort the handshake # with an "unexpected_message" alert. # # New handshake message types are assigned by IANA as described in # Section 11. [[spec]] level = "MUST" quote = ''' Protocol messages MUST be sent in the order defined in Section 4.4.1 and shown in the diagrams in Section 2. ''' [[spec]] level = "MUST" quote = ''' A peer which receives a handshake message in an unexpected order MUST abort the handshake with an "unexpected_message" alert. '''