Redis ios客户端以安全方式使用websocket

时间:2018-07-07 02:34:49

标签: ios swift websocket redis

我目前正在使用Websocket从iOS客户端与Redis实例进行通信。我指定了主机地址和侦听端口,并直接从IOS客户端执行一些Redis命令。

之所以这样做,是因为我正在进行实时实时地理位置跟踪并从php中的后端执行这些命令,这会导致延迟。

恐怕这不是最安全的方法,因为如果有人知道我的主机地址和端口,他将能够访问我的Redis实例。

我的问题是我该如何使用Websocket从iOs客户端与Redis实例进行通信,但更安全。

3 个答案:

答案 0 :(得分:1)

有几种方法可以完成此操作,具体取决于项目的设置方式。您可以在php / redis容器前面添加一个NGINX负载均衡器,该负载均衡器接受JSON Web令牌进行身份验证。 https://www.nginx.com/blog/authentication-content-based-routing-jwts-nginx-plus/

Redis也具有进行身份验证的能力,但是看起来并没有被认为是最佳实践,但是您还可以在这里找到有关它的更多信息: https://redis.io/commands/auth

答案 1 :(得分:1)

@Ahmed,

我阅读了@ThatCampbellKid提供的答案和评论,并了解您希望iOS客户端直接与Redis服务器通信的想法。

但是,Redis was NOT designed for this approach。如文档中所示(强调):

  

Redis旨在供受信任的客户端 内部 受信任的环境访问。

不是互联网是受信任的环境,直接访问允许Redis被不受信任的客户端访问。

同一文档提供了以下示例(添加了重点):

  

在通常直接暴露于互联网的单台计算机(例如虚拟化Linux实例(Linode,EC2等)的情况下, Redis端口应进行防火墙保护,以防止来自外部的访问。客户端仍然可以使用环回接口访问Redis。

正确的方法是使用动态应用程序对客户端进行身份验证,并在客户端和Redis服务器之间建立桥梁。

您可以使用JWT(@ThatCampbellKid建议的nginx模块),PHP,Ruby,node.js,Java,C或任何您想要的东西-但您将需要使用某些东西。

很抱歉,我这么说,但是任何其他快捷方式都会使您的系统面临安全风险。


编辑

是的,您仍然可以使用WebSocket。

区别在于此体系结构不安全:

Client <=(WebSockets)=> Redis

而且这种架构是安全的(如果实施正确):

Client <=(WebSockets)=> Authentication Layer <=(TCP)=> Redis

答案 2 :(得分:0)

正如您所说的,您已经在运行Nginx,然后看看Nchan websockets module

您的Nginx安装程序然后可以直接为websocket连接提供服务,并且支持多种客户端身份验证方法以及与redis的直接集成