一、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。