3.6.2 SSL 会话重用

从 MySQL 8.0.29 开始,服务器默认支持 SSL 会话重用,但仅在用户启用该功能后的可配置超时时间内。所有 MySQL 客户端应用程序都支持会话重用。有关服务器端和客户端操作的说明,请参阅 重用 SSL 会话

本节介绍 C 应用程序如何使用 C API 功能为加密连接启用会话重用。

SSL 会话重用工作原理如下

  1. 在 SSL 连接处于活动状态时,您的应用程序可以通过调用 mysql_get_ssl_session_data() 请求当前 SSL 会话数据。该调用返回一个指向内存中对象的指针,该对象当前是会话的 PEM 序列化形式的 ASCII 字符串。

  2. 然后,您的应用程序使用 MYSQL_OPT_SSL_SESSION_DATA 选项将指针传递给 mysql_options(),以便在正在构建的新连接中使用(在预连接阶段)。

  3. 在运行时,应用程序像往常一样连接。此时,之前的会话有可能被重用。您的应用程序可以通过调用 mysql_get_ssl_session_reused() 来确定是否正在为新连接重用会话。如果存在会话并且已重用,则该调用返回 TRUE

  4. 在您的应用程序不再需要该指针后,务必通过调用 mysql_free_ssl_session_data() 释放它。

MySQL 使用与 TLS 上下文相关的随机上下文 ID,这也适用于会话重用。在 TLS 1.3 中,当发生上述调用顺序时,OpenSSL 使用预共享密钥进行会话重用。相反,在 TLS 1.2 中,OpenSSL 使用会话票证。