利用密码机实现openssl异步引擎

文章介绍了openssl异步机制如何提高nginxssl连接效率,通过将加解密运算移到密码机上,减少CPU消耗。重点讲述了实现openssl异步的接口,包括ASYNC_WAIT_CTX和ASYNC_JOB等,以及如何利用这些接口与密码机交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

openssl中的加解密运算非常消耗cpu,会导致nginx的ssl连接数跟不上,现阶段大多数利用intel QAT加密卡实现openssl的异步机制,让耗时的加解密运算在加密卡中执行。本文利用密码机通过网络实现异步。

一、openssl的异步机制为什么快

nginx建立ssl连接的大致流程如下
在这里插入图片描述
nginx在同步模式下建立ssl连接要经历以上五个步骤。其中3密码运算非常消耗cpu,传统的多线程机制不起作用。如果利用异步模式就能让密码运算在密码机的cpu中进行运算,负责建立nginx连接的cpu只用处理1 2 4 5这四个阶段,所以nginx建立ssl的连接效率就会大大增加。

二、实现openssl异步的接口

##引擎所需接口
// 拿到当前的job
ASYNC_JOB *ASYNC_get_current_job(void);
// 通过job拿到对应的ctx,
ASYNC_WAIT_CTX *ASYNC_get_wait_ctx(ASYNC_JOB *job);
#获得注册到ctx中的fd和custom_data
int ASYNC_WAIT_CTX_get_fd(ASYNC_WAIT_CTX *ctx, const void *key,
                          OSSL_ASYNC_FD *fd, void **custom_data);
 #注册fd和custom_data到ctx中,一般注册管道的读端                        
ASYNC_WAIT_CTX_set_wait_fd(ASYNC_WAIT_CTX *ctx, const void *key,
                          OSSL_ASYNC_FD *fd, void **custom_data, cleanup);  
#将数据包发送给密码机后协程切换到最开始状态                          
ASYNC_pause_job();
#ssl所需接口
// 创建
ASYNC_WAIT_CTX *ASYNC_WAIT_CTX_new(void);
// 销毁
void ASYNC_WAIT_CTX_free(ASYNC_WAIT_CTX *ctx
//开启一个协程执行func
int ASYNC_start_job(ASYNC_JOB **job, ASYNC_WAIT_CTX *ctx, int *ret,
                    int (*func)(void *), void *args, size_t size);
 #nginx所需要接口
 //从ctx中获取注册的fd,并进行监听
 int ASYNC_WAIT_CTX_get_all_fds(ASYNC_WAIT_CTX *ctx, OSSL_ASYNC_FD *fd, size_t *numfds);
int ASYNC_WAIT_CTX_get_changed_fds(ASYNC_WAIT_CTX *ctx, OSSL_ASYNC_FD *addfd,
                                   size_t *numaddfds, OSSL_ASYNC_FD *delfd,
                                   size_t *numdelfds);    

三、利用密码机实现openssl的异步机制

在这里插入图片描述
一个协程---------一个job-------ctx--------存放一个协程数据的对象(pipefd)

总结

openssl异步机制利用协程,需要配合异步加密卡,或者通过网络连接密码机来进行实现,通过将耗时的加解密运算丢给密码机,能够大大提高ssl握手连接数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值