MQTT 安全

以下是 MQTT 安全的三個基本概念:身分、鑑別及授權。身分可為要授權及提供權限的用戶端命名。鑑別可提供用戶端的身分,而授權可管理為用戶端提供的權限。

身分

透過用戶端 ID、使用者 ID 或公用數位憑證來識別 MQTT 用戶端。這些屬性中有一項定義了用戶端身分。MQTT 伺服器使用 SSL 通訊協定鑑別用戶端傳送的憑證,或使用用戶端設定的密碼鑑別用戶端身分。伺服器根據用戶端身分控制用戶端可以存取的資源。

MQTT 伺服器使用 IP 位址及數位憑證自行識別用戶端。MQTT 用戶端使用 SSL 通訊協定鑑別伺服器傳送的憑證。在某些情況下,它使用伺服器的 DNS 名稱來驗證為其傳送憑證的伺服器登錄為憑證持有者。

請按下列其中一種方式設定用戶端的身分:

用戶端 ID
MqttClient 類別(C 中的 MQTTClient_createMQTTAsync_create)可設定用戶端 ID。呼叫類別建構子,將用戶端 ID 設為參數,或傳回隨機產生的用戶端 ID。用戶端 ID 在所有連接至伺服器的用戶端中必須是唯一的,而且不可與伺服器上的佇列管理程式同名。即使不是用於身分檢查,所有用戶端皆必須具備用戶端 ID。請參閱用戶端 ID
使用者 ID
MqttClient 類別(C 中的 MQTTClient_createMQTTAsync_create)可將用戶端使用者 ID 設為 MqttConnectOptions 的屬性(C 中的 MqttClient_ConnectOptions)。使用者 ID 不需要是用戶端唯一的。
用戶端數位憑證
用戶端數位憑證儲存在用戶端金鑰儲存庫中。金鑰儲存庫位置視用戶端而定:
  • Java

    透過呼叫 MqttConnectOptionssetSSLProperties 方法並傳遞金鑰儲存庫內容,來設定用戶端金鑰儲存庫的位置及內容。請參閱對 Example.java 的 SSL 修改keytool 工具可管理 Java 金鑰及金鑰儲存庫。

  • C

    MQTTClient_createMQTTAsync_create 將金鑰儲存庫內容設為 MQTTClient_SSLOptions ssl_opts 的屬性。openSSL 工具可建立及管理適用於 C 的 MQTT 用戶端所存取的金鑰及金鑰儲存庫。

  • Android

    設定 > 安全功能表,管理 Android 裝置金鑰儲存庫。從 SD 卡載入新憑證。

將伺服器的私密金鑰儲存在伺服器金鑰儲存庫中,以設定伺服器的身分:

IBM WebSphere MQ
MQTT 伺服器金鑰儲存庫是用戶端所連接遙測通道的屬性。

使用「IBM WebSphere MQ 探險家」或 DEFINE CHANNEL 指令設定金鑰儲存庫位置及屬性;請參閱 DEFINE CHANNEL (MQTT)。多個通道可以共用金鑰儲存庫。

鑑別

MQTT 用戶端可以鑑別其所連接之 MQTT 伺服器,且該伺服器可以鑑別它所連接的用戶端。

用戶端使用 SSL 通訊協定鑑別伺服器。MQTT 伺服器使用 SSL 通訊協定及/或密碼鑑別用戶端。

如果用戶端鑑別伺服器,但伺服器未鑑別用戶端,用戶端通常稱為匿名用戶端。通常透過 SSL 建立匿名用戶端連線,然後使用 SSL 階段作業加密的密碼鑑別用戶端。由於憑證公佈及管理問題,使用密碼(而非用戶端憑證)鑑別用戶端更為普遍。您可能在高價值裝置(如 ATM 及晶片銀行卡機)及在自訂裝置(智慧型電表)中尋找用戶端憑證。

透過用戶端鑑別伺服器
MQTT 用戶端透過使用 SSL 通訊協定鑑別伺服器憑證,來驗證連接至正確的伺服器。當您透過 HTTPS 通訊協定瀏覽網站時,此驗證表單對您來說很熟悉。

伺服器可將公用憑證(由憑證管理中心簽署)傳送至用戶端。用戶端使用憑證管理中心的公開金鑰,來驗證伺服器憑證上的憑證管理中心的簽章。它也會檢查憑證是否是最新的。這些檢查會確定憑證是否有效。

憑證管理中心憑證(通常稱為主要憑證)儲存在用戶端信任儲存庫中:
  • Java

    呼叫 MqttConnectOptionssetSSLProperties 方法並傳遞信任儲存庫內容,以設定用戶端信任儲存庫的位置及內容。請參閱對 Example.java 的 SSL 修改。使用 keytool 工具管理憑證及信任儲存庫。

  • C

    MQTTClient_createMQTTAsync_create 將信任儲存庫內容設為 MQTTClient_SSLOptions ssl_opts 的屬性。使用 openSSL 工具管理憑證及信任儲存庫。

  • Android

    設定 > 安全功能表,管理 Android 裝置信任儲存庫。從 SD 卡載入新的主要憑證。

透過伺服器鑑別用戶端

MQTT 伺服器透過使用 SSL 通訊協定鑑別用戶端憑證,或使用密碼鑑別用戶端身分,來驗證連接至正確的用戶端。

它使用 MQTT 通訊協定標頭中用戶端傳送至伺服器的密碼,來鑑別用戶端。伺服器可以選擇使用密碼鑑別用戶端 ID、使用者 ID 或憑證。它視伺服器而定。通常,伺服器鑑別使用者 ID。透過 SSL 連線(驗證伺服器來保護安全)驗證密碼,以避免用明碼傳送密碼。
  • IBM WebSphere MQ

    IBM WebSphere MQ 使用 SSL 通訊協定鑑別用戶端憑證。將主要憑證儲存在 IBM WebSphere MQ Telemetry 金鑰儲存庫中。您只能透過相互 SSL 鑑別來鑑別用戶端憑證。亦即,您必須為用戶端提供伺服器公用憑證,以及為伺服器提供用戶端公用憑證。

    對於它自己的專用和公用憑證,及其他公用憑證(例如,憑證管理中心提供的主要憑證),IBM WebSphere MQ Telemetry 使用相同的儲存庫。

    使用「IBM WebSphere MQ 探險家」或 DEFINE CHANNEL 指令設定金鑰儲存庫位置及屬性;請參閱 DEFINE CHANNEL (MQTT)。多個通道可以共用金鑰儲存庫。

    IBM WebSphere MQ 透過呼叫 Java 鑑別及授權服務 (JAAS),來鑑別用戶端使用者 ID 或用戶端 ID。

    在儲存於 jaas.config 檔案的 MQXRConfig 配置段落中配置 JAAS。檔案儲存在 IBM WebSphere MQ 資料路徑中的 qmgrs\QmgrName\mqxr 目錄中。

    透過為 JAASLoginModule 撰寫 login 方法來檢查用戶端的確實性。請參閱遙測通道 JAAS 配置

    IBM WebSphere MQ Telemetry 會為 JAASLoginModule.login 方法傳遞下列參數:
    • 使用者 ID
    • 密碼
    • 用戶端 ID
    • 網路 ID
    • 通道名稱
    • ValidPrompts

授權

授權不是 MQTT 通訊協定的一部分。它由 MQTT 伺服器提供。授權的內容視伺服器執行的作業而定。MQTT 伺服器是發佈/訂閱分配管理系統,且有用的 MQTT 授權規則可控制哪些用戶端可以連接至伺服器,及用戶端可以發佈或訂閱哪些主題。如果 MQTT 用戶端可以管理伺服器,則更多授權規則控制哪些用戶端可以管理伺服器的不同方面。

可用的用戶端非常多,因此分別授權每一個用戶端是不可行的。MQTT 伺服器將具有按設定檔或群組將用戶端分組的方法。

從存取及權限的觀點來看,用戶端的身分在某些方面對於 MQTT 用戶端不是唯一的。用戶端的身分不等於用戶端 ID。它們可能相同,但通常是不同的。例如,您可能具有在許多服務中共用的使用者名稱,且其中部分服務在「單一登入」中相互合作。企業級 MQTT 伺服器可能會呼叫授權服務,從而為不同的應用程式提供共用身分及權限。

IBM WebSphere MQ

IBM WebSphere MQ 具有外掛授權服務。WindowsLinux 上提供的預設授權服務是物件權限管理程式 (OAM)。請參閱在 UNIX、Linux 及 Windows 系統上使用 OAM 來控制對物件的存取權。它會將作業系統使用者 ID 及群組與 IBM WebSphere MQ 物件上的作業(例如,主題和佇列)相關聯。

您可以配置遙測通道,以使用固定的使用者 ID 來存取 IBM WebSphere MQ。這是設定範例通道的方式。或者,您可以使用 MQTT 用戶端設定的使用者 ID 來存取 IBM WebSphere MQ授權 MQTT 用戶端存取 WebSphere MQ 物件中說明了如何設定 IBM WebSphere MQ Telemetry,以實現粗略、中等及精細用戶端存取控制的方法。


概念 概念

反饋

「時間戳記」圖示 前次更新時間: 2018 年 10 月 23 日,星期二
http://www.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mm.tc.doc/com.ibm.mm.tc.doc/tc00150_.htm