当前位置: 首页 > news >正文

Bufferevent and SSL

bufferevent可以使用OpenSSL库实现SSL/TLS安全传输层。因为很多应用不需要或者不想链接OpenSSL,这部分功能在单独的libevent_openssl库中实现。未来版本的libevent可能会添加其他SSL/TLS库,如NSS或者GnuTLS,但是当前只有OpenSSL。
OpenSSL功能在2.0.3-alpha版本引入,然而直到2.0.5-beta和2.0.6-rc版本才能良好工作。

这一节不包含对OpenSSL、SSL/TLS或者密码学的概述。
这一节描述的函数都在event2/bufferevent_ssl.h中声明。

Creating and using OpenSSL-based bufferevents

 enum bufferevent_ssl_state {BUFFEREVENT_SSL_OPEN = 0,BUFFEREVENT_SSL_CONNECTING = 1,BUFFEREVENT_SSL_ACCEPTING = 2};
struct bufferevent *bufferevent_openssl_filter_new(struct event_base *base,struct bufferevent *underlying,SSL *ssl,enum bufferevent_ssl_state state,int options)

可以创建两种类型的SSL bufferevent:基于过滤器的、在另一个底层bufferevent之上进行通信的buffervent;或者基于套接字的、直接使用OpenSSL进行网络通信的bufferevent。这两种bufferevent都要求提供SSL对象及其状态描述。如果SSL当前作为客户端在进行协商,状态应该是BUFFEREVENT_SSL_CONNECTING;如果作为服务器在进行协商,则是BUFFEREVENT_SSL_ACCEPTING;如果SSL握手已经完成,则状态是BUFFEREVENT_SSL_OPEN。

接受通常的选项。BEV_OPT_CLOSE_ON_FREE表示在关闭openssl bufferevent对象的时候同时关闭SSL对象和底层fd或者bufferevent。

创建基于套接字的bufferevent时,如果SSL对象已经设置了套接字,就不需要提供套接字了:只要传递-1就可以。也可以随后调用bufferevent_setfd()来设置。

SSL * bufferevent_openssl_get_ssl(struct bufferevent *bufev)

这个函数返回OpenSSL bufferevent使用的SSL对象。如果bev不是一个基于OpenSSL的bufferevent,则返回NULL。

unsigned long bufferevent_get_openssl_error(struct bufferevent *bev)

这个函数返回给定bufferevent的第一个未决的OpenSSL错误;如果没有未决的错误,则返回0。错误值的格式与openssl库中的ERR_get_error()返回的相同。

int bufferevent_ssl_renegotiate(struct bufferevent *bev)
调用这个函数要求SSL重新协商,bufferevent会调用合适的回调函数。这是个高级功能,通常应该避免使用,除非你确实知道自己在做什么,特别是有些SSL版本具有与重新协商相关的安全问题。

evbuffer:缓冲IO实用功能

libevent的evbuffer实现了为向后面添加数据和从前面移除数据而优化的字节队列。

evbuffer用于处理缓冲网络IO的“缓冲”部分。它不提供调度IO或者当IO就绪时触发IO的功能:这是bufferevent的工作。

除非特别说明,本章描述的函数都在event2/buffer.h中声明。

http://www.lryc.cn/news/486826.html

相关文章:

  • 我要成为算法高手-位运算篇
  • 分布式IO模块:智慧楼宇的“智慧眼”与“智慧手”
  • 嵌入式八股文
  • 【IOS】Undefined symbol: _OBJC_CLASS_$_PAGFile
  • Spring Boot整合Tomcat底层源码分析
  • 工具类-基于 axios 的 http 请求工具 Request
  • WPF的基础控件详解
  • qt学习:截图+键盘事件
  • Scala中Arry
  • 学习threejs,使用AnimationMixer实现变形动画
  • 两大新兴开发语言大比拼:Move PK Rust
  • 基于一种基于OCR图像识别技术的发票采集管理系统及方法
  • 基于深度学习的车牌检测系统的设计与实现(安卓、YOLOV、CRNNLPRNet)+文档
  • JavaWeb——JS、Vue
  • Springboot 整合 Java DL4J 构建股票预测系统
  • ATmaga8单片机Pt100温度计源程序+Proteus仿真设计
  • FPGA通过MIPI CSI-2发送实时图像到RK3588,并HDMI显示
  • ELK8.15.4搭建开启安全认证
  • 原生微信小程序中封装一个模拟select 下拉框组件
  • 商品管理系统引领时尚零售智能化升级 降价商品量锐减30%
  • UE5 5.1.1创建C++项目,显示error C4668和error C4067
  • spring boot 集成 redis 实现缓存的完整的例子
  • json-bigint处理前端精度丢失问题
  • 【算法】【优选算法】前缀和(下)
  • Node.js 23 发布了!
  • 如何通过低代码逻辑编排实现业务流程自动化?
  • thinkphp6模板调用URL方法生成的链接异常
  • Spring Boot汽车资讯:科技驱动的未来
  • 嵌入式硬件电子电路设计(五)LDO低压差线性稳压器全面详解
  • qiankun主应用(vue2+element-ui)子应用(vue3+element-plus)不同版本element框架css样式相互影响的问题