对于 TLSv1.3,默认情况下,OpenSSL 服务器会创建 2 个票证,如此处所述。这发生在服务器的
SSL_do_handshake
调用中,在内部完成实际的 TLSv1.3 握手之后。
关于会话恢复,我只见过客户使用发出的第二张票,而不是第一张。
我在rfc8446的各种会话票证相关章节中没有找到任何原因或建议。多个票证使得跟踪票证以关联服务器端状态变得更加困难(尤其是因为一些未记录且令人兴奋的 API“功能”),或者实现一次性票证作为潜在的安全措施,如 rfc8446 中所述这里,因为语义不清楚。
为什么服务器会在握手后立即创建多个票证而不是仅创建一个票证,如果客户端似乎只关心最后一个票证,那么第一个票证的用途是什么?
会话票证用于 TLS 会话恢复。 https://www.rfc-editor.org/rfc/rfc9149.html 中最好地描述了多票证的用法: “例如,客户端可以打开到同一 HTTP 服务器的并行 TLS 连接,或者可以跨不同网络接口竞争 TLS 连接。后者在实现 Happy Eyeballs 的传输系统中特别有用。”
如果使用网络浏览器,客户端可能会连接到服务器,下载主页,然后获取两张票并打开另外两个连接以获取资源,立即使用两张票。
关于会话恢复,我只见过客户使用发出的第二张票,而不是第一张。
我见过的所有客户都按照后进先出的顺序使用会话票证。如果他们收到两张票,他们首先使用第二张票,但如果需要建立另一个连接,则使用第一张票。