我想使用OpenSSL来处理我们所有的SSL通信(客户端和服务器端)。我们希望使用HW加速卡卸载繁重的密码计算。
我们注意到在OpenSSL的“速度”测试中,有对密码函数(例如RSA_sign/decrypt等)的直接调用。为了充分利用HW容量,需要多个线程(最多128个线程)来加载请求卡,并确保HW卡永不空闲。
我们希望使用高级OpenSSL API来处理SSL (例如,SSL_connect/read/write/accept),但是这个API并不公开实际加密操作的执行点。例如,在调用SSL_connect时,我们不知道执行RSA操作的点,而且我们也不知道哪些调用会导致大量的密码计算,并且只将那些调用引用到加速器。
问题:
更新
发布于 2015-10-20 22:18:35
根据用多选项解释rsa的openssl速度输出的说法,-multi并不是“并行化”的工作,它只是并行运行多个基准测试。
因此,您的HW卡的负载将从本质上受到当前可用工作量的限制(请注意,一般来说,在工业中,80%的计划容量负载在负载峰值的情况下被认为是最佳的)。当然,运行多个服务器线程/进程将产生与多个基准测试相同的效果。
OpenSSL 支持多个线程,只要您给它回调以锁定共享数据。.对于多个进程,它警告从父进程继承的重用数据状态。
这就是垂直缩放的方法。用于水平缩放:
openssl通过异步BIOs支持异步I/O英特尔宣布了一些“异步OpenSSL”项目 (08.2014)与其硬件一起使用,但链接白皮书很少给出它的实现和开发状态的细节。一位开发人员发布了一些相关代码 (10.2015)指出,它“足够稳定,可以得到一个概述”。
发布于 2015-10-10 08:26:28
正如jww在注释中提到的,您应该使用引擎API来完成任务。上面的链接中有一个关于如何使用该API的示例。通常,硬件加速器提供者实现一个称为“引擎”的库--这个引擎提供加密加速,可以由OpenSSL内部使用。假设您想要使用的加速器已经实现了一个引擎(例如"cswitft"),您应该通过调用ENGINE *e = ENGINE_by_id("cswift");来获得引擎,然后将它初始化为ENGINE_init(e);,并将其设置为您想要使用的操作的默认值,例如ENGINE_set_default_RSA(e);。
调用这些函数之后,可以使用OpenSSL的高级API (例如SSL_connect/read/write/accept)。
https://stackoverflow.com/questions/32994981
复制相似问题