提高 SSL 握手性能

Gle*_*len 5 c c++ openssl

我有一个短暂的客户端进程,它通过 SSL 与服务器通信。该进程被频繁调用,并且仅运行很短的时间(通常小于 1 秒)。此进程旨在用作用于执行较大任务的 shell 脚本的一部分,并且可能会被频繁调用。

在我的测试中,它每次启动时执行的 SSL 握手都显示为一个重要的性能瓶颈,如果可能的话,我希望减少它。

我想到的一件事是获取会话 ID 并将其存储在某个地方(有点像 cookie),然后在下一次调用时重新使用它,但这让我感到不安,因为我认为会有一些安全问题围绕做这件事。

所以,我有几个问题,

  1. 这是一个坏主意吗?
  2. 使用 OpenSSL 是否可以实现这一点?
  3. 有没有更好的方法来加速 SSL 握手过程?

caf*_*caf 4

握手后,您可以从与 的连接中获取 SSL 会话信息SSL_get_session()。然后,您可以将i2d_SSL_SESSION()其序列化为可写入磁盘的形式。

当您下次想要连接到同一台服务器时,您可以从磁盘加载会话信息,然后使用反序列化d2i_SSL_SESSION()并使用SSL_set_session()来设置它(在 之前SSL_connect())。

磁盘上的 SSL 会话应该只能由运行该工具的用户读取,并且应经常覆盖和删除过时的会话。