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

使用libwebsocket技术总结

一、编译libwebsocket

1) 需要使用Cmake工具,将根目录下CMakeLists.txt打开后,需要配置openssl库的路径

2) 当前libwebsocket v3.2版本需要使用openssl v1.1.x以上版本,否则ssl安全协议支持只能选择内置ssl模块,一般都选择openssl库作为ssl加密库。

3) Openssl 库的版本问题

当前终端安全登录产品中使用Openssl v0.9.8k加密通信。该库编译后的目标库为libeay32.dll、ssleay32.dll。经过perl config后,在子目录ms下形成两个nasm.mak文件。

Libwebsocket库使用Openssl v1.1.x支持ssl加密通信。该库编译后的目标库名为libssl、libCrypto,而且编译方法有差异。

编译时指定CFLAG =/MT, 编译依赖标准c运行时,减少对vc运行时依赖。

Libwebsocket支持的协议,包括http1.1、http2.0,支持ssl安全通信。

二、安全websocket

1) 使用openssl产生自签名证书

openssl genrsa -out server.key 2048
openssl rsa -in server.key -out server.key
openssl req -sha256 -new -key server.key -out server.csr -subj "/CN=localhost"
openssl x509 -req -sha256 -days 365 -in server.csr -signkey server.key -out server.crt

或者

openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout self.key.pem -out self-x509.crt -subj "/C=CN/CN=localhost"

2) 编译测试工程

编译minimal-examples\ ws-server\minimal-ws-server,需要创建vc控制台工程项目,并引用websocket.dll动态库,使用/MT编译选项,编译为动态库。

编译时依赖库包括:ws2_32.lib;userenv.lib;psapi.lib;iphlpapi.lib;advapi32.lib。

可在lws_context_creation_info中指定自己创建的证书、私钥文件路径。

info.ssl_cert_filepath = "self-x509.crt";
info.ssl_private_key_filepath = "self.key.pem";

3) 安全wss协议测试的浏览器环境

无论谷歌、火狐浏览器,都需要先设置ssl安全例外,添加可信任的服务证书。

4) Google浏览器

直接运行测试例子可以正常收发。通过调试器查看到第一个通信过程是

  Request URL: wss://localhost:8443/
Request Method: GET
Status Code: 101 Switching Protocols

HTTP/1.1 101 Switching Protocols
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Accept: 7qZ3iyz7fpBsH5sgrNhFwZcSfFg=
Sec-WebSocket-Protocol: lws-minimal

GET wss://localhost:8443/ HTTP/1.1
Host: localhost:8443
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36
Upgrade: websocket
Origin: https://localhost:8443
Sec-WebSocket-Version: 13
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Sec-WebSocket-Key: m+k1azZCRrWV+Mpj9Q0klw==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Sec-WebSocket-Protocol: lws-minimal  

5) Firefox浏览器

需要先配置浏览器(由于使用高版本采用了SPDY协议,包括http 2.0多路复用功能),在浏览器地址栏输入about:config,搜索websocket。设置项如下

也有网上资料说可以开启 network.websocket,应为低版本火狐中的配置项。高版本中(FF v71)已无该选项。

network.http.spdy.websockets,如果不禁用,会导致libwebsocket无法建立wss连接。SPDY协议是http 2.0中多路复用功能,如果浏览器一直使用http2.0,则需要关闭该功能,如果使用http 1.1通信,则该功能是不启用的。

network.websocket.allowInsecureFromHTTPS,主要用于在http网页中发起wss连接。相反,也有在https网页中发起ws连接,也有响应配置项。

配置完成后,Firefox浏览器运行测试例子可以正常收发。通过调试器查看到通信过程

HTTP/1.1 101 Switching Protocols
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Accept: tqw6pb9N25Dl6lHXPSnbDlOMIyU=
Sec-WebSocket-Protocol: lws-minimal

Host: localhost:8443
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Sec-WebSocket-Version: 13
Origin: https://localhost:8443
Sec-WebSocket-Protocol: lws-minimal
Sec-WebSocket-Extensions: permessage-deflate
Sec-WebSocket-Key: C2AMP6WJRQk8OgSPFMphIQ==
Connection: keep-alive, Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket


http://www.kler.cn/a/510091.html

相关文章:

  • python(25) : 含有大模型生成的公式的文本渲染成图片并生成word文档(支持flask接口调用)
  • LabVIEW 蔬菜精密播种监测系统
  • 【JavaEE】Spring Web MVC
  • JEL分类号
  • HTML5+Canvas实现的鼠标跟随自定义发光线条源码
  • python管理工具:conda部署+使用
  • 音视频入门基础:RTP专题(4)——FFmpeg源码中,判断某文件是否为SDP文件的实现
  • Web自动化测试平台设计与落地
  • 2025.1.15——五、时间盲注
  • 音乐播放器实现:前端HTML,CSS,JavaScript综合大项目
  • Python----Python高级(模块与包,Python基本库)
  • java权限修饰符
  • 线上工单引发的思考:Spring Boot 中 @Autowired 与 @Resource 的区别
  • YOLOv10-1.1部分代码阅读笔记-ops.py
  • 【HarmonyOS NAPI 深度探索9】发布到 npm 并管理版本
  • kubuntu24.04配置vmware17.5.1
  • 【Office学习】PPT中的图片如何放清晰地放到论文中
  • 深度学习J9周:Inception v3算法实战与解析
  • git创建分支,推送分支,合并分支,回退
  • 使用 Python 开发一个 AI Agent 自媒体助手示例
  • dbt Semantic Layer 详细教程-6 :指标(metrics)配置规范及示例
  • 认识 MySQL 和 Redis 的数据一致性问题
  • 动态主机配置协议 (DHCPv4)介绍,详细DHCP协议学习笔记
  • LeetCode:47.全排列 II
  • WPS计算机二级•高效操作技巧
  • TCP TIME-WAIT 状态为什么要坚持 2MSL