前言
在前一篇 使用 MQTTnet 匿名存取遠端 mosquitto Broker 設定 mosquitto 的 listener 1883
及 allow_anonymous true
讓它允許匿名遠端存取。
為了安全性,連線時應該要使用帳/密驗證,
所以本文介紹如何設定 mosquitto Broker ,
讓它可以透過使用者帳號及密碼驗證才能連線。
實作
要設定 mosquitto 使用帳/密驗證,
調整如下,
1.建立 password file 檔案
例如 pwdfile.txt,新增帳號及密碼,使用 : 分隔,先建立一個帳/密資料,如下,
1 | mqttuser:p@ssw0rD |
2.使用 mosquitto_passwd.exe
使用 mosquitto 管理帳/密檔案的工具(mosquitto_passwd.exe),
來將帳/密檔中的密碼轉成 Hash 值,
1 | mosquitto_passwd.exe -U pwdfile.txt |
3.設定 mosquitto.conf
在 mosquitto.conf 中
3.1.將 allow_anonymous 設定成 false
3.2.將 per_listener_settings 設定成 true
3.3.設定 password_file ,後面接 實體檔案路徑
1 | per_listener_settings true |
4.重新啟動 mosquitto 服務
如果可以正常重新啟動,沒有錯誤表示設定沒有問題。
5.修改 MQControlCenter 專案
使用 MQTTnet 套件的 MQControlCenter 專案還是可以連接 mosquitto broker,
因為 mosquitto broker 需要帳/密驗證,
所以在建立 MqttClientOptionsBuilder 時,
需要加上 WithCredentials 設定帳/密。
1 | using MQTTnet.Client; |
而在原本透過 mosquitto_pub.exe 發送訊息,也是需要加上設定帳/密才可以發送哦~
1 | mosquitto_pub -t "home/temperature/sensor3" -m "message from azure vm sensor3" -u mqttuser -P p@ssw0rD |
測試結果如下,
參考資源
Mosquitto Username and Password Authentication
How to Install The Mosquitto MQTT Broker on Windows