自学内容网 自学内容网

使用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


原文地址:https://blog.csdn.net/qq_54089476/article/details/145224749

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!