我在读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 中这些符号的解释?
答案1
你的解释与常见的 (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)是对 TLS1.1 的 RFC4346 和 TLS1.0 的 RFC2246 的修改;它也适用于随后发布的 TLS1.2 的 RFC5246。(它不适用于 RFC8446 中的 TLS1.3;1.3 用一种新的临时 PSK 方法(重用会话参数)取代了旧形式的会话恢复和 5077 类型的票证,并重用了 NewTicket 消息代码与 5077 完全不同的数据。)图 1 之后紧接着说明了 * 的含义RFC5246在第 36 页,RFC4346或RFC2246在第 31 页。这不是其他协议或 RFC 的标准。即使TLS1.3 的 RFC8446从而大大改变它。