跳到主要内容

3.4. 与 TLS 会话 ID 的交互

如果服务器计划向一个未呈交票据的客户端签发会话票据, 它 应当 (SHOULD) 在 ServerHello 中包含一个空的 Session ID。如果服务器拒绝该票据并回退到完整握手, 则它可以包含一个非空 Session ID, 以表明它支持有状态 (stateful) 会话恢复。如果客户端从服务器收到会话票据, 则它丢弃在 ServerHello 中发送的任何 Session ID。

在呈交票据时, 客户端 可以 (MAY) 在 TLS ClientHello 中生成并包含一个 Session ID。如果服务器接受该票据且该 Session ID 非空, 则它 必须 (MUST) 以与 ClientHello 中相同的 Session ID 响应。这使客户端能够容易地区分服务器是在恢复会话, 还是在回退到完整握手。由于 Session ID 由客户端生成, 服务器在验证票据时 不得 (MUST NOT) 依赖该 Session ID 具有某个特定值。如果客户端呈交了票据, 服务器 不得 (MUST NOT) 尝试使用 ClientHello 中的 Session ID 进行有状态会话恢复。另一种做法是, 客户端 可以 (MAY) 在 ClientHello 中包含一个空 Session ID。在这种情况下, 客户端忽略 ServerHello 中发送的 Session ID, 并通过后续的握手消息来判断服务器是否在恢复会话。