在初始 https 之后再次为 wss 握手?

Posted

技术标签:

【中文标题】在初始 https 之后再次为 wss 握手?【英文标题】:ssl handshake again for wss after initial for https? 【发布时间】:2013-02-23 08:39:49 【问题描述】:

假设一个 100% 安全的 websocket 站点,其中 webserver 提供所有文件:html、js、css 等,websocket 提供客户端和服务器之间的所有数据。

显然最初的ssl握手是在默认https端口上的客户端和webserver之间进行的,但是wss会在不同的端口上,所以它必须再次握手吗?

我问的原因是因为 websockets 和 spdy 还没有一起工作(所以我已经阅读过),所以我希望通过在 web 服务器上安装 spdy 并依靠 keep-alive 来解决它wss,因为有些人声称 spdy 并不比握手后的 keep-alive 快很多(如果有的话)spdy faster than keep-alive https?。

【问题讨论】:

【参考方案1】:

虽然 Travis 所说的大部分内容都是事实,但我不清楚他为什么对你的问题回答“否”。

当客户端打开到 webserver 的 HTTPS 连接时,webserver 可能会为使用 wss:// 启动 WebSocket 连接的 JS 提供到不同的源(可能是同一主机,但正如您所描述的,它是不同的端口)。这是一个不同的连接。必须为每个连接单独执行 SSL 握手。

Travis 所说的对于 SSL 会话是正确的,如果 WebSocket 使用与 https:// 文档获取相同的连接,那么回答“否”是正确的。但由于 wss:// WebSocket 连接初始化将使用不同的连接,它需要另一个 SSL 握手。

【讨论】:

【参考方案2】:

没有。 SSL 协议决定客户端和服务器如何协商要使用的密码套件、相互认证、传输证书、建立会话密钥和传输消息。握手成功完成后,流过新 SSL 会话的所有数据都是受握手期间同意的加密算法和会话密钥保护。

【讨论】:

以上是关于在初始 https 之后再次为 wss 握手?的主要内容,如果未能解决你的问题,请参考以下文章

WebSocket 连接到“wss://test.example.com:8090/”失败:WebSocket 打开握手超时

Websockets 在 Chrome (wss) 中不工作:“握手被取消”

https中的WebSocket打开握手超时

无法使用 UnitySocketIO 与 wss://echo.websocket.org/ 握手

https 的 WSS 连接失败

Spring WebSocket:握手因升级头无效而失败:null