2015-09-07 83 views
0

我正在使用我們正在開發的移動應用程序之一中使用Rabbit MQ代理程序,我對安全方面感到困惑。我們使用雲託管的rabbitmq,託管平臺給了我們用戶名和密碼(這已經改變了),我們正在使用SSLconnection,所以不用擔心MIM或竊聽。移動應用程序中的RabbitMQ安全性

我的問題是誰知道主機和端口可以連接到rabbitmq,因爲我們有移動應用程序,我們在設備上存儲rabbitmq用戶名和密碼(儘管加密),所以我猜想任何人都可以物理訪問設備和以某種方式解密用戶名密碼可以登錄到rabbitmq,一旦你登錄,你幾乎可以在rabbitmq上做任何事情,如刪除隊列等。 在移動環境中如何使用像Rabbitmq一樣的MQ。有更好/更安全的方式使用rabbitmq。

+0

您可以使用自定義權限創建單獨的用戶嗎(或者只是只讀訪問權限而沒有任何管理員權限)? – pinepain

+0

是的,這是可能的,但即使如此,移動應用程序用戶需要一些特權,如發佈等。我不希望未經授權的用戶從我的應用程序外部連接並開始發佈。 – user424060

+0

這個問題在其他情況下如何解決,例如在沒有RabbitMQ或任何其他MQ之間的解決方案? – pinepain

回答

0

根據我的經驗,最好不要讓您的手機應用程序直接連接到rabbitmq。在應用程序和RabbitMQ之間使用網絡服務器。讓您的移動應用程序通過基於HTTP的API調用連接到您的Web服務器。 Web服務器將連接到RabbitMQ,您不必擔心移動應用程序中有連接信息。

這方面有幾個優點,在安全問題之上:

  • 更好的RabbitMQ連接管理
  • 易於擴展的移動用戶數
  • 更多的邏輯和處理增加的能力後端根據需要不改變移動應用程序

創建到RabbitMQ的連接是一項昂貴的操作。它需要一個TCP/IP連接。一旦連接打開,它將保持打開狀態,直至關閉它。如果您從移動應用打開連接並將其保持打開狀態,則會減少RabbitMQ的可用連接數量。如果您快速打開和關閉連接,則會不斷創建和關閉連接,從而導致大量額外成本。

與中間的網絡服務器,您可以打開單個連接並讓它管理多個移動設備。 Web服務器將處理http請求,並使用rabbitmq的一個連接將消息推送給它。

由於HTTP Web請求是一個短暫的連接,因此與使用直接rabbitmq連接相比,您可以在短時間內處理更多用戶。

這最終導致更好的可擴展性,因爲您可以添加另一個Web服務器來處理數千個移動應用實例,同時只添加1個新的RabbitMQ連接。

這也可以讓你添加Web服務器內部的中間層邏輯。您可以根據需要添加額外的處理層,而無需更改移動應用程序。更改Web服務器代碼並根據需要重新部署。

如果您必須在中間沒有服務器的情況下執行此操作,您可能無法解決您遇到的安全問題。移動設備將包含進行連接的必要信息。

+0

我不確定在中間放置Web服務器是否解決了這個問題。另外Http和你描述的一樣有問題,就像Http你也必須建立TCP連接一樣,它沒有比連接到rabbitmq更輕。事實上,與MQTT與rabbitmq的連接相比,http的密集程度更高。 – user424060

+0

rabbitmq上的HTTP/HTTPS連接「更輕」。大多數情況下,您可以通過網絡應用處理更多流量,而不是通過rmq,因爲連接不會打開。 MQTT確實爲RMQ解決了這個問題,但我仍然保持Web服務器的其他優勢,使其值得擁有中間層。 –

+0

關於使用API​​的移動應用程序的安全性:http://programmers.stackexchange.com/questions/219028/how-to-safeguard-a-rest-api-for-only-trusted-mobile-applications - 你可以要求移動應用程序用戶登錄,這至少會爲應用程序提供某種級別的授權。但最終,我認爲你不能解決「假」客戶的問題。 –