2012-04-07 229 views
20

我已經爲MQTT設置了一切併爲其工作。我使用的是IBM wmqtt.jar和Mosquitto經紀人..MQTT安全 - 如何防止濫用者訂閱主題?

我的Java Servlet創建一個MQTTConnection到代理和主題「AndroidDeviceID/myAppName」下發布..

Android客戶端訂閱同一主題...

在我看來,如果有人知道我的用戶的設備名稱,他們可以創建一個簡單的Android應用程序,並訂閱我的MQTT經紀人的主題。然後他們從我的用戶那裏得到所有通知(在這種情況下是即時通訊消息)。

這是如何正確避免的?

+1

該鏈接可以是用於MQTT和安全概念是有益的:HTTP: //www.hivemq.com/mqtt-security-fundamentals/ – 2016-10-25 12:27:03

回答

13

Mosquitto通過用戶名和密碼認證提供安全性,並通過訪問控制列表限制對主題的訪問。有關詳細信息,請參見mosquitto.conf手冊頁:http://mosquitto.org/man/mosquitto-conf-5.html

+2

非常感謝,我也剛剛開始遷移到最新版本的Java MQTT - Eclipse Paho - http://git.eclipse.org/c/p aho/org.eclipse.paho.mqtt.java.git /它看起來像這將支持連接上的用戶名/密碼。我仍然有一個問題是encrpytion ..我所有的其他數據都是通過SSL發送的... MQTT消息將是即時消息的預覽,所以我認爲這是保密的。有關如何防止窺探網絡流量的任何想法? – 2012-04-07 19:05:24

+0

嗯,我想我可以讓我自己的簡單混淆方法在來回的文本,嗯..不完全是什麼,我與SSL加密和證書認證雖然。但是,也許沒有去IBM的商業MMQT經紀人,這是我能做的最好的? – 2012-04-07 19:08:23

+0

Mosquitto將在未來獲得SSL支持。與此同時,你可以做簡單的消息加密......並不是我意識到的最佳答案。 – ralight 2012-04-07 22:59:34

3

通常,MQTT保持非常「輕」的安全性,因爲它最初設計用於封閉的傳感器網絡。代理人的實施可以提供例如SSL並決定如何處理用戶名/密碼後端。

消息數據的加密不太可能由協議本身提供,並且通常在應用程序層完成,如果這非常重要的話。

5

ACL是什麼限制了客戶訂閱的話題,我使用的是AUTH-插件,這樣做,這裏是鏈接mosquitto auth plugin

+2

你有沒有使用Redis的auth插件? 我正在努力的價值觀: auth_opt_redis_userquery ??和auth_opt_redis_aclquery? – TheAshwaniK 2015-03-14 00:56:49

+2

我正在使用auth插件與MySQL。看看[實施](https://github.com/jpmens/mosquitto-auth-plug/blob/master/be-redis.c)可以幫助你。 – achuth 2015-03-16 04:22:22

2

如果你需要處理的訪問控制和主題的權限的多個自定義的方式,嘗試使用HiveMQ MQTT代理。就像在文檔中解釋的那樣,你可以用插件實現你自己的行爲。這種方法允許您完全決定如何處理客戶端,發佈和訂閱的身份驗證和授權[1]。如果你感興趣的話,在這裏描述一下你自己的插件開始的最佳方式[2]。

順便說一下,爲HiveMQ配置TLS也很簡單[3]。

基督教 (HiveMQ隊)

[1] http://www.hivemq.com/docs/plugins/1.5.0/#auth-permission-chapter

[2] http://www.hivemq.com/documentations/getting-started-plugins/

[3] http://www.hivemq.com/docs/hivemq/1.5.0/#hivemqdocs_ssl_tls