WebSocket实战之四WSS配置

一、前 言

上一篇文章
WebSocket实战之三遇上PAC ,碰到的问题只能上安全的WebSocket(WSS)才能解决,配置证书还是挺麻烦的,主要是每年都需要重新更新证书,我配置过的证书最长有效期也只有两年,搞不清楚为什么CA证书的有效期那么短,是为了多收钱吗?

注:网上找的一张图,理论与实践相结合,理论指导实践,实践验证理论。

二、配置WSS

WebSocket协议定义了WebSocket(WS://)以及WebSocket安全(WSS://)两种前缀,WebSocket使用HTTP握手然后升级为WebSocket协议进行通信,WebSocket安全(WSS)使用HTTPS握手然后升级为安全的WebSocket协议,WSS其实就是WS+TLS。

1、Nginx配置证书

map指令根据客户端请求http_upgrade变量的值,来改变connection_upgrade的值。如果没有规则匹配的话connection_upgrade值为upgrade,如果http_upgrade为空字符串,$connection_upgrade值为close。

snakeoil.conf

注:WSS证书的配置与HTTPS证书配置是一样的,另外/websocket/几行代码就是用来将WebSocket的连接转发到WebSocket应用。

2、客户端代码

只需要把ws改成wss就可以。

注:配置WSS几乎不用更改程序代码。

三、WSS协议抓包分析

复制代码
tcpdump -ieth0 port 443 -w wss.pcap

将这张图与WebSocket实战之二协议分析 对比,我们发现基于TLS的WSS,在网络传输过程中完全被加密了,而如果是未加密的WS协议,一些代理服务器可能理解不了类似101响应码会导致WebSocket握手失败,而使用WSS协议,数据是加密的,代理只能允许连接成功并且允许WebSocket数据流通过,不然会造成误伤。

注:使用了WSS一个方面数据传输更安全,数据抓包看不到传的是什么东东,另外一方面可以保证能够顺利穿透代理服务器和防火墙。

chrome://net-internals

在浏览器端除了可以用Chrome开发者工具调试WebSocket,还可以使用net-internals进行更低级的网络诊断,可以查看WebSocket套接字的细节。

四、WSS与HTTPS关系

TCP->HTTP

TCP->TLS->HTTPS

TCP->WS 使用HTTP协议进行握手,然后用WS进行数据传输。

TCP->TLS->WSS 使用HTTPS协议进行握手,然后用WSS进行数据传输。

相关推荐
九英里路5 小时前
protobuf快速上手
网络·c++·中间件·json·谷歌·序列化·protobuf
女神下凡11 小时前
芯参谋(107):杰理AC_中科蓝讯_开发指南
linux·服务器·网络·单片机·嵌入式硬件
我不会起名字32213 小时前
未接入最终读上限的参数:`websocketMaxMsgLen` 与 12.5 倍差距
后端·websocket·go·即时通讯·im·故障排查
爱和冰阔落16 小时前
【Linux网络】TCP 半包粘包怎么解决?从长度报头、JSON 拆包到网络计算器完整实战
linux·运维·网络·tcp/ip
say_fall17 小时前
【Linux网络编程】UDP套接字编程:系统编程组件、基础回显服务、InetAddr与地址转换、翻译服务与线程池聊天室
linux·服务器·网络·udp·vr
我不会插花弄玉1 天前
6.传输层协议UDP【由浅入深-网络】
网络·网络协议·udp
火云代理1 天前
更换网络后为什么会退出登录?分清 IP、Cookie 与会话的关系
服务器·网络·网络协议·tcp/ip·php·ip
xbzb1 天前
容器 IP 每次重建都变?docker network 五种模式与自定义网桥固定地址
网络·docker·容器·ip·network·固定
火云代理1 天前
同一个网站,有的网络能打开、有的打不开?认识 IPv4 与 IPv6 的访问差异
服务器·网络·网络协议·tcp/ip·测试工具·php·状态模式
坤坤子吖1 天前
Linux网络编程:TCP 粘包与半包问题,如何正确处理 TCP 流式数据?
linux·服务器·网络·笔记·网络协议·学习