一、SSL/TLS簡介
SSL/TLS是一種用於加密網際通信的協議。當用戶嘗試登錄一個需要用戶名和密碼的網站時,網站會將通過TLS協議進行加密後的信息發送給用戶的Web瀏覽器,該瀏覽器在用戶輸入的信息與之前用於加密的信息進行比較,確定用戶名和密碼是否正確。
MQTT Broker作為一種基於TCP協議的協議,也可以使用SSL/TLS協議進行通信加密,從而保證通信的安全性。EMQ X作為一個完整的MQTT Broker,也提供了SSL/TLS的支持。
二、EMQ X SSL/TLS埠概述
EMQ X默認情況下是使用1883埠作為MQTT的監聽埠,如果需要啟用SSL/TLS加密機制,需要使用8883埠作為MQTT over SSL/TLS協議的監聽埠。
EMQ X還可以同時支持MQTT over WebSocket和MQTT over SSL/TLS over WebSocket的協議,可以使用8083埠作為MQTT over WebSocket協議的監聽埠,使用8084埠作為MQTT over SSL/TLS over WebSocket協議的監聽埠。
三、如何配置EMQ X SSL/TLS埠
以下是配置EMQ X SSL/TLS埠的步驟。
步驟1:生成證書和私鑰文件
首先需要生成證書和私鑰文件。
在Linux系統中使用如下命令,生成證書和私鑰文件:
$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /path/to/private/key.pem -out /path/to/certificate.pem
其中,/path/to/private/key.pem代表生成的私鑰文件的存放路徑,/path/to/certificate.pem代表生成的證書文件的存放路徑。
步驟2:修改配置文件
修改/etc/emqx/emqx.conf文件,在文件末尾添加以下內容:
listener.ssl.external = 8883 listener.ssl.require_peer_cert = false listener.ssl.keyfile = /path/to/private/key.pem listener.ssl.certfile = /path/to/certificate.pem
其中listener.ssl.external = 8883表示使用8883埠作為MQTT over SSL/TLS協議的監聽埠,listener.ssl.require_peer_cert = false表示不需要進行客戶端證書驗證,listener.ssl.keyfile = /path/to/private/key.pem和listener.ssl.certfile = /path/to/certificate.pem分別表示私鑰文件和證書文件的路徑。
步驟3:重啟EMQ X
重啟EMQ X,使配置生效。
$ emqx restart
四、如何使用SSL/TLS連接EMQ X Broker
以下是使用SSL/TLS連接EMQ X Broker的步驟。
步驟1:獲取EMQ X證書
首先需要獲取EMQ X證書。
在Linux系統中使用如下命令,獲取EMQ X證書:
$ openssl s_client -connect domain:8883
其中domain是EMQ X伺服器的域名或IP地址。
在運行以上命令後,會輸出證書的詳細信息,需要將證書複製到本地中,重命名為emqx.crt。
步驟2:使用MQTT客戶端連接EMQ X Broker
在使用MQTT客戶端連接EMQ X Broker時,需要指定SSL/TLS協議、伺服器地址和埠、客戶端證書(可選)、用戶名和密碼(可選)等參數。
例如,在Python中使用paho-mqtt庫連接EMQ X Broker時,可以使用以下代碼:
import ssl import paho.mqtt.client as mqtt client = mqtt.Client() # 指定SSL/TLS協議 client.tls_set(ca_certs="emqx.crt", certfile=None, keyfile=None, cert_reqs=ssl.CERT_REQUIRED, ciphers=None) # 指定EMQ X伺服器地址和埠 client.connect("domain", 8883) # 指定用戶名和密碼(可選) client.username_pw_set(username="username", password="password") # 連接EMQ X Broker client.connect() # 發布消息 client.publish("topic", "message") # 訂閱主題 client.subscribe("topic") # 斷開連接 client.disconnect()
五、小結
本文介紹了如何在EMQ X MQTT Broker中啟用SSL/TLS埠,以及如何使用SSL/TLS連接EMQ X Broker。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/251719.html