Linux Mosquitto MQTT Clients 與 公用Broker 驗証

本文是有關於在 Ubuntu 上使用 Mosquitto Clients 與 Mosquitto.org 公開的測試 Broker 做 TLS 的連線測試。

IOT 也聽聞好幾年了,最近終於有機接觸到一個 IOT 的平台,搭配 STM32 Arduino + BG96 4G NBIOT  Module,要做監控的方案。自從開始嘗試一些其它工作後,收獲還不少,長了很多見識。像這個案子裡,就用了之前聽過很久的 Arduino、和被我唱衰的IOT。其中一項收獲,就是這篇要講的 MQTT。

MQTT is a machine-to-machine (M2M)/”Internet of Things” connectivity protocol – mqtt.org

MQTT Suite – Mosquitto

MQTT 是一個輕量的訊息發佈、訂閱通訊協定。在 Linux 上如果要找MQTT程式,通常都會找到 Mosquitto 這個程式。Mosquitto 是由知名的 IDE 開發工具 Eclipse 所屬的組織開發,也難怪上 Google 一找都是提到它。

MQTT 協定上有分三個角色, Broker (訊息仲介者), Publisher(訊息發佈者) 與 Subscriber(訊息訂閱者)。這個概念還蠻直覺的,就像報社(Broker)、記者(Publisher)與訂閱戶(Subscriber) 的關係。有人發佈訊息、有人訂閱訊息,還有一個負責轉送訊息的。

Mosquitto Clients 設定

所謂的 Clients 是指 Subscriber與 Publisher,在 Ubuntu Linux 上已可以用 apt 直接安裝。要注意的是在 14.04 上的版本並不支援 TLS,在 16.04 才有。由於本文是利用 TLS ,所以請使用 16.04 做測試。若一定要使用 14.04,可以下載原始碼進行編譯,用apt安裝一個uuid開發套件後就可編譯成功。

 

Mosquitto 公用測試伺服器

Mosquitto 公用測試伺服器

Mosquitto 有提供一個免費的公用 Broker 伺服器,支援其所有可用的連線方式。包含未加密、SSL、TLS、WebSocket 等等。本文要測試的 TLS,是使用 PORT 8884。

TLS 需要對雙方的身份做認証,因此在測試站上也提供使用者登錄自己的身份和下載伺服器憑証,透過三個檔案 “伺服器憑証“、”用戶端憑証“、”用戶密鑰“,才可以完成連線進行發佈和訂閱。

產生密鑰和取得憑証

伺服器憑証在公用伺服器的主頁就有提供連結可下載 (mosquitto.org.crt),直接下載即可。而用戶端憑証/密鑰則需先在本地端自行產生後再送上公用伺服器做登錄,才可使用。產生的方法在登錄網頁上有寫,這邊節錄說明。其中用到的openssl程式,在新的 Linux Distribution預設都有安裝了。

其中產生 CSR 的部份,就是為了要將身份登錄到伺服器上。產生過程中會問一些問題,基本上隨便填就可以了(千萬不要傻傻的填真的…),密碼的部份留空白就可以了。下達命令後,會產生一個 .csr 的檔案,可用 cat 指令將其內容輸出後,複制下來。

產生 CSR

將 CSR 內容複制下來

 

 

接下來將 CSR 的內容 (包含前後 BEGIN/END 的兩行)複制下來,貼到登錄網頁右側的部份,按下 Submit 後,即完成登錄,並且下載其產生的用戶端憑証 (client.crt)。

取得用戶憑証

發佈與訂閱

到此,會取得三個檔案:伺服器憑証 (mosquitto.org.crt), 用戶端憑証 (client.crt) 與 用戶端密鑰 (client.key)。這樣,便能使用這三個檔案與伺服器連線,進行發佈與訂閱。為方便測試,我們可以開啟兩個終端機,一個執行發佈,一個執行訂閱。

發佈的動作執行完,程式會結束,但訂閱則會持續連線監聽事件。並且,發佈進行時,訂閱程式要先執行。發佈時若訂閱程式未執行,後面再執行是收不到之前的訊息的。

訂閱命令

發佈命令

當訂閱程式啟動後,再執行發佈程式,訂閱端就可以收到其訊息了。

Subscriber 收到訊息

Publisher 發出訊息

結語

本文提及的部份,只是符合個人使用上的需求。其它諸如Broker伺服器架設、Mosquitto 程式編譯、參數解說都沒談到。因為在 IOT 的Arduino系統上,並非使用 Mosquitto Client,伺服器端也非我的負責範圍內。因此側重在憑証的產生與驗証,確保可以產生 Mosquitto  可接受的憑証,再放到 Arduino 上的 MQTT Client。

另外,官方網頁上也有 Mosquitto 的 Windows 版程式,單純當成訂閱端也是蠻方便的,參數上基本相同。

Leave a Reply(Name請以user_開頭,否則會被判定會垃圾息)

請輸入答案 10 ÷ 1 =