【问题标题】:RabbitMQ security in mobile app移动应用程序中的 RabbitMQ 安全性
【发布时间】:2015-09-07 07:36:41
【问题描述】:

我在我们正在开发的一个移动应用程序中使用 Rabbit MQ 代理,我对安全方面有点困惑。我们正在使用云托管的 rabbitmq 和托管平台为我们提供了用户名和密码(此后已更改),并且我们使用的是 SSLconnection,因此不太担心 MIM 或窃听。

我担心的是任何知道主机和端口的人都可以连接到rabbitmq,因为我们有移动应用程序,我们将rabbitmq用户名和密码存储在设备上(虽然加密)所以我猜任何人都可以物理访问设备并且以某种方式解密用户名密码可以登录rabbitmq,一旦你登录,你几乎可以在rabbitmq上做任何事情,比如删除队列等。 MQ like Rabbitmq 如何在移动环境中使用。有没有更好/更安全的方式使用rabbitmq。

【问题讨论】:

  • 您可以创建具有自定义权限的单独用户(或者只是没有任何管理员权限的只读访问权限)吗?
  • 是的,这是可能的,但即便如此,移动应用用户也需要一些权限,例如发布等。我不希望未经授权的用户从我的应用外部连接并开始发布。
  • 在其他情况下如何解决此问题,例如在没有 RabbitMQ 或任何其他 MQ 的解决方案中?
  • 说如果我有我的自定义客户端服务器使用 TCP 套接字编写,即使你有一些如何连接到服务器你将无法做任何事情,因为你不知道协议,对于 mq 协议是开放的,因此任何人都可以连接和运行命令,只要他们能够获得用户名/密码
  • 我的意思是有人反编译你的应用程序,他甚至可以建立 SSL 连接并调查任何自定义协议。 SSL 只是 MiM 保护。为了确保可执行文件的安全,还有其他技术(或多或少有效)。而此时问题与 RabbitMQ 安全模型无关。

标签: security ssl rabbitmq


【解决方案1】:

根据我的经验,最好不要让您的移动应用直接连接到 rabbitmq。在应用程序和 RabbitMQ 之间使用 Web 服务器。让您的移动应用程序通过基于 HTTP 的 API 调用连接到您的 Web 服务器。 Web 服务器将连接到 RabbitMQ,您不必担心移动应用程序中包含连接信息。

除了安全问题之外,这样做还有几个优点:

  • 更好地管理 RabbitMQ 连接
  • 更容易扩展移动用户数量
  • 能够根据需要向后端添加更多逻辑和处理,而无需更改移动应用程序

创建到 RabbitMQ 的连接是一项昂贵的操作。它需要 TCP/IP 连接。一旦该连接打开,它就会保持打开状态,直到您关闭它。如果您从移动应用程序打开一个连接并保持打开状态,您将减少到 RabbitMQ 的可用连接数。如果您快速打开和关闭连接,则会在不断创建和关闭连接方面产生大量额外成本。

通过中间的网络服务器,您可以打开一个连接并让它管理多个移动设备。 Web 服务器将处理 http 请求并使用与 rabbitmq 的一个连接将消息推送到它。

由于 HTTP 网络请求是一个短暂的连接,因此与直接 rabbitmq 连接相比,您将能够在短时间内处理更多的用户。

这最终会带来更好的可扩展性,因为您可以添加另一个 Web 服务器来处理数千个移动应用程序实例,同时只添加 1 个新的 RabbitMQ 连接。

这还允许您在 Web 服务器内添加中间层逻辑。您可以根据需要添加额外的处理层,而无需更改移动应用程序。更改 Web 服务器代码并根据需要重新部署。

如果您必须在中间没有服务器的情况下执行此操作,您可能无法解决您遇到的安全问题。移动设备将包含建立连接所需的信息。

【讨论】:

  • 我不确定将 Web 服务器放在中间是否可以解决此问题。 Http也有你描述的同样的问题,比如Http你也必须建立一个TCP连接,它并不比连接到rabbitmq更轻松。事实上,与 MQTT 连接到 rabbitmq 相比,http 的强度要高得多。
  • 一个 HTTP/HTTPS 连接在 rabbitmq 上是“轻量级的”。大多数情况下,您可以通过 Web 应用程序处理比 rmq 更多的流量,因为连接没有保持打开状态。 MQTT 确实为 RMQ 解决了这个问题,但我仍然保持 Web 服务器的其他好处,使其值得拥有中间层。
  • 关于使用 api 的移动应用程序的安全性:programmers.stackexchange.com/questions/219028/… - 您可以要求移动应用程序用户登录,这至少也会为应用程序提供某种级别的授权。但最终,我认为您无法解决“假”客户的问题。
猜你喜欢
  • 2017-06-24
  • 2016-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多