Mosquitto MQTT 安裝
2016年8月17日- MQTT 的全名為 Message Queuing Telemetry Transport,為 IBM 和 Eurotech 共同製定出來的協定,MQTT 是為了物聯網設計的協定,透過Publish/Subscribe 的方式來做訊息傳送。
- Publish/Subscribe 有三種主要的組成元件,分別為Publisher、Subscriber 以及 Topic。
- mosquitto 為 Eclipse 所開發的開源 MQTT broker 和給用戶端使用C語言的API介面,目前最新版本為 V1.4.9。
Prerequisites
|
Install Mosquitto Broker
|
Install Mosquitto Client
|
測試
開啟兩個終端機分別輸入終端機1(Subscribe)
|
-d :debug 模式 , -t :訂閱的主題名稱 , -h :Broker's IP , -p :Broker's port
終端機2(Publish)
|
-m :發送的文字內容
當兩個command line 都輸入完後終端機分別會看到
終端機1(Subscribe)
|
終端機2(Publish)
|
mosquitto.conf 參數說明
設定檔設置於/etc/mosquitto/mosquitto.conf
詳細的參數說明如下:
|
參考來源 :
認證方式
Broker的認證方式,Mosquitto端提供了四種認證方法分別為
- 無認證
- 帳號/密碼
- 預先共享密鑰(Pre-shared Key)加密
- 憑證加密
無認證
要打開/etc/mosquitto/mosquitto.conf
設定檔將allow_anonymous設定為true即可。此時我們可以利用mosquitto_sub來測試Subscribe
|
Publish
|
-t :訂閱的主題,-v :連主題名稱也列印在銀幕上。
帳號/密碼
- 新增帳號密碼
使用此方式需利用上述的mosquitto_passwd
產生密碼,並將密碼檔案名稱設定到password_file此欄位。
mosquitto_passwd -c "" "" 如果passwordfile檔案已經存在,則下次新增使用者則不需要加 -c
下列命令將新產生一個密碼檔案/etc/mosquitto/passwd,並建立一個帳號名稱為easy,使用者輸入密碼後即可建立帳號與密碼
sudo mosquitto_passwd -c /etc/mosquitto/passwd easyPassword: xxxxReenter password: xxxx - 設定ACL(Access Control List)
Path :/etc/mosquitto/acl
內容如下:
# 用戶easy 對於主題hello/world 能夠進行寫入user easytopic write hello/world# 用戶easy 對於主題hello/world 能夠進行讀取user easytopic read hello/world - 最後更改
/etc/mosquitto/mosquitto.conf
設定檔
allow_anonymous false #不允許匿名傳輸password_file /etc/mosquitto/passwd #配置用戶(username)密碼acl_file /etc/mosquitto/acl #設置用戶與主題(topic)存取權限 - 測試
Subscribe
Publishmosquitto_sub -h "" -v -d -t "" -u "" -P ""
mosquitto_pub -h "" -v -t "" -m "" -u "" -P ""
預先共享密鑰(Pre-shared Key)加密
這個認證方式需要使用到OpenSSL中的預先共享密鑰加密方式,而在OpenBSD開發的LibreSSL專案中,因為SSL/TLS安全性的問題,預先共享密鑰加密方式暫時被移除了。未移除之前的修改方式如下:
- 設定PSK(Pre-Shared Key)
Path :/etc/mosquitto/psk
內容如下:
每一行有兩個欄位以':'隔開,第一個欄位為帳號而第二個欄位即為密鑰
#帳號:密鑰easy:b7ecaa34a9dbd7bfb8e9ee707427176d04d19eb3 - 修改
/etc/mosquitto/mosquitto.conf
設定檔
#不允許匿名傳輸allow_anonymous false# 取消 MQTT username for accessrequire_certificate true# 開啟 pre-shared-key based encryptionuse_identity_as_username true# 設置 psk_filepsk_file /mosquitto/psk
- 測試
Subscribe
Publishmosquitto_sub -h "" -v -d -t "" --psk-identity "" -psk ""
mosquitto_pub -h "" -v -t "" --psk-identity "" -psk "" -m ""
憑證加密
TLS是非常成熟的安全協議,在握手的時候便可以創建安全連接,使得駭客無法竊聽或者篡改內容。使用TLS的時候有以下注意點:- 盡可能使用高版本的TLS。
- 驗證X509憑證連結防止中間人攻擊。
- 儘量使用有CA發佈的證書。
- 產生憑證
建立CA(Certificate Authority)所需的證書及密鑰
系統端的憑證openssl req -new -x509 -days 365 -extensions v3_ca -keyout ca.key -out ca.crt
# 產生不加密的金鑰openssl genrsa -out server.key 2048# 產生憑證簽發請求檔案(Certificate Signing Request)openssl req -new -key server.key -out server.csr# 憑證簽發openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 - 修改
/etc/mosquitto/mosquitto.conf
設定檔
listener 8883cafile /etc/mosquitto/ca.crtcertfile /etc/mosquitto/server.crtkeyfile /etc/mosquitto/server.key - 測試
Subscribe
Publishmosquitto_sub -d -h "" -p 8883 -t topic --cafile ca.crt
mosquitto_pub -d -h "" -p 8883 -t topic -m "Hello World!" --cafile ca.crt
沒有留言:
張貼留言