OpenSSL会话重用(服务器端) - 想要选择要重用的会话

时间:2016-01-19 15:27:44

标签: openssl

我使用内部缓存(SSL_SESS_CACHE_SERVER缓存模式)运行基本服务器。因此,每次客户端发送有效的会话ID时,OpenSSL都会自动启动会话重用。我希望有一个选项可以根据一些非常动态的属性决定是否要重用可用的会话。

如果我能得到类似于" SSL_set_session"客户,这将是完美的。 OpenSSL将缓存会话,我将通过使用SSL_set_session来决定何时以及是否使用它们。

不存储特定会话不是一种选择。我正在寻找一种方法来进行会话查找&重用 - 仅按需提供。

谢谢!

1 个答案:

答案 0 :(得分:0)

为此,当您第一次收到连接时(在执行TLS握手之前),您可以执行以下操作:

int allow_session_reuse = 1;
long sess_cache_mode;

/* Call some code here to determine whether SSL session caching/reuse
 * should be disabled for this connection.
 */
allow_session_reuse = do_session_reuse();

/* Let's assume the answer is "No, we should not allow session reuse
 * for this connection."
 */
if (!allow_session_reuse) {
  long cache_mode;

  /* Disable all session caching on the SSL_CTX object. Note that these
   * session caching modes are for the entire SSL_CTX, not for the
   * individual SSL objects.
   */
  sess_cache_mode = SSL_CTX_set_session_cache_mode(ssl_ctx, SSL_SESS_CACHE_OFF);

} else {
  sess_cache_mode = SSL_CTX_get_session_cache_mode(ssl_ctx);
}

/* .... process your TLS handshake here ... */

/* Make sure to restore the previous session cache mode, for the
 * next connection.
 */
SSL_CTX_set_session_cache_mode(ssl_ctx, sess_cache_mode);

如果您想要更复杂地处理缓存的会话数据,则需要考虑使用SSL_CTX_sess_set_get_cb()提供会话缓存回调。

希望这有帮助!