使用libwebsocket技术总结

ops/2025/1/21 0:49:46/

一、编译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 ProtocolsHTTP/1.1 101 Switching Protocols
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Accept: 7qZ3iyz7fpBsH5sgrNhFwZcSfFg=
Sec-WebSocket-Protocol: lws-minimalGET 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-minimalHost: 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.ppmy.cn/ops/151795.html

相关文章

08、如何预防SQL注入

目录 1、分析及其存在哪些危险 2、预防SQL注入 1、分析及其存在哪些危险 原理: SQL 注入是一种常见的网络攻击手段,攻击者通过在用户输入中插入恶意的 SQL 语句,利用程序对用户输入处理不当的漏洞,使恶意 SQL 语句被数据库服务器执行。 通常发生在应用程序将用户输入直接拼…

Web安全|渗透测试|网络安全

基础入门(P1-P5) p1概念名词 1.1域名 什么是域名? 域名:是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时对计算机的定位标识(有时也指地理位置)。 什么是二级域名多级域名…

【python_钉钉群发图片】

需求: **在钉钉群发图片,需要以图片的形式展示,如图所示:**但是目前影刀里面没有符合条件的指令 解决方法: 1、在钉钉开发者后台新建一个自建应用,发版,然后获取里面的appkey和appsecret&am…

【设计模式】 单例模式(单例模式哪几种实现,如何保证线程安全,反射破坏单例模式)

单例模式 作用:单例模式的核心是保证一个类只有一个实例,并且提供一个访问实例的全局访问点。 实现方式优缺点饿汉式线程安全,调用效率高 ,但是不能延迟加载懒汉式线程安全,调用效率不高,能延迟加载双重检…

【Idea】编译Spring源码 read timeout 问题

Idea现在是大家工作中用的比较多的开发工具,尤其是做java开发的,那么做java开发,了解spring框架源码是提高自己技能水平的一个方式,所以会从spring 官网下载源码,导入到 Idea 工具并编译,但是发现build的时…

vue3+vite+ts+router4+Pinia+Axios+sass 从0到1搭建

1、使用vite构建项目 npm create vitelatest 填写项目名的时候不能大写 2、跑起来之后配置下 import { defineConfig } from vite import vue from vitejs/plugin-vue import { resolve } from path // https://vite.dev/config/ export default defineConfig({plugins: [vue…

二、点灯基础实验

嵌入式基础实验第一个就是点灯,地位相当于编程界的hello world。 如下为LED原理图,要让相应LED发光,需要给I/O口设置输出引脚,低电平,二极管才会导通 2.1 打开初始工程,编写代码 以下会实现BLINKY常亮&…

雷电9最新版安装Magisk+LSPosd(新手速通)

大家好啊!我是NiJiMingCheng 我的博客:NiJiMingCheng 在安卓系统的定制与拓展过程中,获取 ROOT 权限以及安装各类框架是进阶玩家常用的操作,这可以帮助我们实现更多系统层面的个性化功能。今天,我将为大家详细介绍如何…