使用libwebsocket技能总结

守听  论坛元老 | 2025-1-20 22:06:22 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1023|帖子 1023|积分 3069

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一、编译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产生自签名证书
  1. openssl genrsa -out server.key 2048
  2. openssl rsa -in server.key -out server.key
  3. openssl req -sha256 -new -key server.key -out server.csr -subj "/CN=localhost"
  4. openssl x509 -req -sha256 -days 365 -in server.csr -signkey server.key -out server.crt
复制代码
或者
  1. 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中指定本身创建的证书、私钥文件路径。
  1. info.ssl_cert_filepath = "self-x509.crt";
  2. info.ssl_private_key_filepath = "self.key.pem";
复制代码
3) 安全wss协议测试的浏览器环境
无论谷歌、火狐浏览器,都需要先设置ssl安全例外,添加可信任的服务证书。
4) Google浏览器
直接运行测试例子可以正常收发。通过调试器查看到第一个通信过程是
  1.   Request URL: wss://localhost:8443/
  2. Request Method: GET
  3. Status Code: 101 Switching Protocols
  4. HTTP/1.1 101 Switching Protocols
  5. Upgrade: WebSocket
  6. Connection: Upgrade
  7. Sec-WebSocket-Accept: 7qZ3iyz7fpBsH5sgrNhFwZcSfFg=
  8. Sec-WebSocket-Protocol: lws-minimal
  9. GET wss://localhost:8443/ HTTP/1.1
  10. Host: localhost:8443
  11. Connection: Upgrade
  12. Pragma: no-cache
  13. Cache-Control: no-cache
  14. User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36
  15. Upgrade: websocket
  16. Origin: https://localhost:8443
  17. Sec-WebSocket-Version: 13
  18. Accept-Encoding: gzip, deflate, br
  19. Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
  20. Sec-WebSocket-Key: m+k1azZCRrWV+Mpj9Q0klw==
  21. Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
  22. 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浏览器运行测试例子可以正常收发。通过调试器查看到通信过程
  1. HTTP/1.1 101 Switching Protocols
  2. Upgrade: WebSocket
  3. Connection: Upgrade
  4. Sec-WebSocket-Accept: tqw6pb9N25Dl6lHXPSnbDlOMIyU=
  5. Sec-WebSocket-Protocol: lws-minimal
  6. Host: localhost:8443
  7. User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0
  8. Accept: */*
  9. 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
  10. Accept-Encoding: gzip, deflate, br
  11. Sec-WebSocket-Version: 13
  12. Origin: https://localhost:8443
  13. Sec-WebSocket-Protocol: lws-minimal
  14. Sec-WebSocket-Extensions: permessage-deflate
  15. Sec-WebSocket-Key: C2AMP6WJRQk8OgSPFMphIQ==
  16. Connection: keep-alive, Upgrade
  17. Pragma: no-cache
  18. Cache-Control: no-cache
  19. Upgrade: websocket
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

守听

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表