初次握手后,我可以安全地依靠WebSocket连接吗?

初次握手后,我可以安全地依靠WebSocket连接吗?

问题描述:

典型场景:初次握手后,我可以安全地依靠WebSocket连接吗?

1)客户端通过使用HTTPS的POST请求将其凭据发送到服务器。

2)服务器验证凭证是否正确并验证用户。因此它返回一个JWT(JSON Web Token)给客户端。

3)客户端打开非安全 WebSocket连接(ws://)。因此,客户端和服务器现在有一个轻松交换数据的渠道(确切的原因在这里并不重要)。

4)用户通过WebSocket和JWT向服务器发送任何类型的请求,以便服务器可以验证这些请求是否合法。

5)服务器在成功验证每个请求的JWT后,使用WebSocket通道返回用户询问的数据。

由于我们使用HTTPS,我们假设智威汤逊发布时并未被盗(HTTPS可能被击败,但让我们假设它对我们的目的是理智的)。

事实上,我们使用非安全的WebSocket意味着有人可以嗅探WebSocket频道的流量并以心跳窃取智威汤逊。因此,我们使用WebSocket Secure(wss://)来代替并应用相同的以前的方案。

既然我们正在使用WebSocket Secure,那么当我们使用WSS通道时,我们是否需要在每次向服务器发送请求时都发送JWT?或者是WebSocket安全通道足够安全,所以服务器和客户端都100%确定(只要TLS未被击败)该通道是合法的?

换句话说:一旦WSS频道安全建立,我们可以信任它吗? (直到连接明显关闭)

我不太了解WSS连接是如何建立的以及它在建立后如何工作。我的理解是:关键部分是握手,一旦握手完成,您就可以安全地依赖WSS通道(因为它阻止了使用TLS进行的MITM攻击,WS不这么做)。

我读了很多这些最后的日子关于这一切,但一些概念仍不清楚。任何帮助将不胜感激!

Websockets使用持久的TCP/IP连接。

使用wss与使用HTTPS相似,这意味着一旦SSL/TLS握手完成,所有Websocket数据就会在TLS包中“包装”(通常是编码)。

假设TLS/SSL连接是安全的,Websocket连接将保持安全并且可能(并且可能应该)只验证一次。

因此,没有理由继续发送智威汤逊一遍又一遍。为了将用户“分配”到连接,使用连接的持久状态是一个更好的解决方案。

侧面说明:虽然不安全,倒不如用“中明确” WebSocket连接时发送的智威汤逊甚至一度(ws://),因为有少嗅出了智威汤逊的机会。