【问题标题】:OpenSSL on mutli-core machine多核机器上的 OpenSSL
【发布时间】:2023-04-01 02:05:01
【问题描述】:

我正在迈出进入 OpenSSL 库的第一步,感觉有点失落。我的机器是Linux操作系统的多线程(至强系列,如果有人需要可以分享更多信息)。

应用程序构建是 SSL-Proxy,因此我需要尽可能快地处理多个 TCP 流,这意味着我希望尽可能无锁地运行 lib。

crypto/crypto.h里面看了一点之后,主要是这个部分:

# ifndef OPENSSL_NO_LOCKING
#  ifndef CRYPTO_w_lock
#   define CRYPTO_w_lock(type)     \
        CRYPTO_lock(CRYPTO_LOCK|CRYPTO_WRITE,type,__FILE__,__LINE__)
#   define CRYPTO_w_unlock(type)   \
        CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_WRITE,type,__FILE__,__LINE__)
#   define CRYPTO_r_lock(type)     \
        CRYPTO_lock(CRYPTO_LOCK|CRYPTO_READ,type,__FILE__,__LINE__)
#   define CRYPTO_r_unlock(type)   \
        CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_READ,type,__FILE__,__LINE__)
#   define CRYPTO_add(addr,amount,type)    \
        CRYPTO_add_lock(addr,amount,type,__FILE__,__LINE__)
#  endif

我试图挖掘代码/API 并迷失了方向。我的问题是:

  • OpenSSL 库对多核/线程应用程序有哪些支持?
  • lib 的哪些部分只能有一个实例(单例)?

【问题讨论】:

  • 这个问题似乎与安全无关。你最好在 Stackoverflow 中询问。
  • 你也许是对的,我也会去那里,虽然我认为根据我在这里读到的问题,我也可以在这里得到一些答案
  • 这可以通过想知道在不同的处理器上运行时是否存在可能有问题的关键部分来构成一个安全问题。例如:是否使用 MMX 扩展(但这仅适用于 intel x86-32,而不是 Xeon)。您想知道如何使其尽可能无锁,这将是一个 SO 问题。

标签: openssl c c++


【解决方案1】:

OpenSSL 库对多核/线程应用程序有哪些支持?

支持多线程应用程序,但请注意,它不能“正常工作”——特别是,您必须 install some special callbacks 以便 OpenSSL 进行必要的序列化/锁定,否则您的程序将遭受竞争条件和不能正常工作。 (即使安装了回调,您仍希望将对任何特定 OpenSSL 套接字/连接的访问​​限制在单个线程中,即没有两个线程同时在同一连接的 OpenSSL 句柄上执行操作而无需同步)

lib 的哪些部分只能有一个实例(单例)?

好吧,锁定回调将(必然)只有一个实例,因为所有线程都使用它们来序列化临界区。

此外,SSL 库设置函数(SSL_load_error_strings()、SSL_library_init() 等)应仅在应用程序执行开始时(即在您产生任何线程之前)调用,而 SSL 库拆卸函数 (如果有)应该只在任何产生的线程被加入()并被丢弃后调用;这样,您将避免线程尝试使用尚未完全构造或已部分或完全销毁的 OpenSSL 资源的任何可能的竞争条件。

我想尽可能无锁地运行库。

好吧,您可能不太走运——OpenSSL 并非设计为无锁运行;它的会话使用共享的非只读数据结构,并且对这些数据结构的访问必须同步,否则会发生错误。我认为您能做的最好的事情就是将锁定回调用作recommended,并相信 OpenSSL 实施者不会持有超过严格必要的锁定时间。如果这还不够,那么您可能必须开始寻找不同的 SSL 库实现,或者考虑使用多进程而不是多线程。

【讨论】:

  • 我接受了这个答案,因为它给了我更多的洞察力,但是如果你有一个地方可以让我更深入地阅读关于 openSSL 结构的内容,那就太好了:)
猜你喜欢
  • 2012-03-26
  • 2023-01-23
  • 2016-01-20
  • 2012-02-07
  • 2010-12-16
  • 2011-10-22
  • 2011-03-09
  • 2011-08-04
  • 2020-10-21
相关资源
最近更新 更多