я читаю RFC5077, и наткнулся на следующую диаграмму:
ClientHello
(empty SessionTicket extension)-------->
ServerHello
(empty SessionTicket extension)
Certificate*
ServerKeyExchange*
CertificateRequest*
<-------- ServerHelloDone
Certificate*
ClientKeyExchange
CertificateVerify*
[ChangeCipherSpec]
Finished -------->
NewSessionTicket
[ChangeCipherSpec]
<-------- Finished
Application Data <-------> Application Data
я думаю Certificate*
означает, что может быть один или несколько Certificate
, и [ChangeCipherSpec]
означает, что это необязательно. Но я не могу найти точных определений в этом документе или в Интернете. Где я могу найти объяснения этих символов для RFC?
Ваша интерпретация будет соответствовать общепринятой (E) нотации BNF и регулярного выражения, но на самом деле
* message is sent once or not at all, depending
[ChangeCipherSpec] is a different record-level type;
technically it is not a 'handshake' message even though
it is a critical element of the handshake protocol.
RFC5077 (и 4507) - это модификация RFC4346 для TLS1.1 и RFC2246 для TLS1.0; это также относится к RFC5246 для TLS1.2, выпущенному впоследствии. (Это не относится к TLS1.3 в RFC8446; 1.3 заменяет как старую форму возобновления сеанса, так и билеты типа 5077 новым методом временного PSK для повторного использования параметров сеанса, а также повторно использует сообщение NewTicket код для данных, совершенно отличных от 5077.) Значение * указано сразу после рис. RFC5246 на странице 36, RFC4346 на странице 33, или RFC2246 на стр. 31. Это не стандарт для других протоколов или RFC в целом. Четный RFC8446 для TLS1.3 существенно меняет его.