马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
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产生自签名证书
- 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
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |