Security 使用WSS进行身份验证,然后使用WS进行数据验证,这有意义吗?

Security 使用WSS进行身份验证,然后使用WS进行数据验证,这有意义吗?,security,ssl,websocket,Security,Ssl,Websocket,我正在使用WebSocket做一些工作,需要解决安全问题。从我所读到的内容来看,很明显,SSL在我的情况下是最好的方法,所以WSS是一条出路(这不是问题,只是事实陈述) 服务器可能会将大量数据流传输到客户端。这些数据不是私有的或敏感的,所以我不担心有人嗅探这些数据。我主要担心的是,WS-connection被验证为在服务器上接收命令可能有害且具有破坏性。必须信任客户端 服务器将是处理能力有限的嵌入式设备。因此,我的观点是,数据可以通过WS在clear中传输 因此,我的方法是让wss的客户端连接到

我正在使用WebSocket做一些工作,需要解决安全问题。从我所读到的内容来看,很明显,SSL在我的情况下是最好的方法,所以WSS是一条出路(这不是问题,只是事实陈述)

服务器可能会将大量数据流传输到客户端。这些数据不是私有的或敏感的,所以我不担心有人嗅探这些数据。我主要担心的是,WS-connection被验证为在服务器上接收命令可能有害且具有破坏性。必须信任客户端

服务器将是处理能力有限的嵌入式设备。因此,我的观点是,数据可以通过WS在clear中传输

因此,我的方法是让wss的客户端连接到服务器,进行身份验证并请求会话密钥。然后,客户端将断开与wss连接的连接,然后通过ws连接到服务器,传递从以前的wss连接接收到的会话密钥。只有当连接立即传递了有效的会话密钥(会话密钥上有适当的过期时间)时,服务器才会接受ws连接。每个客户端只允许通过ws进行一次连接尝试,并在成功的wss连接上重置


所以我的问题是,这种方法是否合理,或者我的方法是否会有一些严重的漏洞。我仅限于ws和wss,我在服务器上使用node.js和websocket节点,在客户端使用纯javascript。

这听起来相当合理(假设服务器到客户端的关系确实不是秘密的)。不过,我会提出一些不同的建议:

  • 只需保持从客户端到服务器的两个WebSocket连接。第一种是wss,用于令牌交换和客户机到服务器的命令(您提到的可能是有害的)。如果第一个连接断开或超时,ws连接也应该终止
  • 不允许通过ws-connection执行任何客户端到服务器的命令/控制
  • 确保除了超时之外,令牌只能使用一次。否则,攻击者可以嗅探ws连接并尝试重放令牌以获得连接
您还需要确保您的初始wss连接已授权(而不仅仅是加密)。换句话说,服务器需要能够验证客户机是它所说的客户机,并且具有进行此连接的授权。此外,如果ws-connection确实只针对可以嗅探的未受保护的服务器到客户端数据,那么攻击者成功建立连接并不是世界末日,因为他们只是在使用带宽和服务器CPU(同样,这是假设客户端到服务器的命令仅限于wss连接)


此外,我将尝试将服务器到客户端的连接作为ws和wss进行基准测试。额外的CPU负载可能比您预期的更容易忍受(一些嵌入式设备在硬件中也有SSL/TLS卸载)。

这听起来相当合理(假设服务器到客户端确实不是秘密的)。不过,我会提出一些不同的建议:

  • 只需保持从客户端到服务器的两个WebSocket连接。第一种是wss,用于令牌交换和客户机到服务器的命令(您提到的可能是有害的)。如果第一个连接断开或超时,ws连接也应该终止
  • 不允许通过ws-connection执行任何客户端到服务器的命令/控制
  • 确保除了超时之外,令牌只能使用一次。否则,攻击者可以嗅探ws连接并尝试重放令牌以获得连接
您还需要确保您的初始wss连接已授权(而不仅仅是加密)。换句话说,服务器需要能够验证客户机是它所说的客户机,并且具有进行此连接的授权。此外,如果ws-connection确实只针对可以嗅探的未受保护的服务器到客户端数据,那么攻击者成功建立连接并不是世界末日,因为他们只是在使用带宽和服务器CPU(同样,这是假设客户端到服务器的命令仅限于wss连接)


此外,我将尝试将服务器到客户端的连接作为ws和wss进行基准测试。额外的CPU负载可能比您预期的更容易忍受(一些嵌入式设备在硬件中也有SSL/TLS卸载)。

嗨,kanaka,谢谢您的回答,它准确地回答了我的问题。我没有想过让wss与ws保持同步,我认为这是一个非常好的解决方案。我还将测试预期的设备是否能够支持所有数据的ssl(但是我怀疑它不能)。我已经有了通过多散列pwd和salt进行身份验证的计划,但是密码将通过wss以明文形式传递。干杯,詹姆斯。嗨,卡纳卡,谢谢你的回答,它准确地回答了我的问题。我没有想过让wss与ws保持同步,我认为这是一个非常好的解决方案。我还将测试预期的设备是否能够支持所有数据的ssl(但是我怀疑它不能)。我已经有了通过多散列pwd和salt进行身份验证的计划,但是密码将通过wss以明文形式传递。干杯,詹姆斯。