MQTT Broker与客户端
EMQX Broker
EMQX提供多种可伸缩的MQTT Broker云服务。以提供免费额度的Serverless MQTT服务为例,配置过程如下:
注册EMQX账户:https://accounts-zh.emqx.com/signup。
完成注册后,登录并按提示创建新项目,填写项目名称并确认:

打开项目,新建 EMQX Broker:

选择带有免费额度的 Serverless 并部署:

部署完成后,可以查看部署信息,包括MQTT连接信息以及可下载的CA证书文件:

在部署信息界面的侧边栏选择 访问控制 - 客户端认证,然后添加用户名和密码:

至此,即完成了EMQX MQTT Broker云服务的部署。假设部署信息如下:
- 连接地址:
- v15f05e.ela.cn-hangzhou.emqxsl.cn
- MQTT over TLS/SSL端口:
- 8883
- WebSocket over TLS/SSL端口:
- 8084
下载CA证书文件为:
emqxsl-ca.crt。并设置了访问控制用户名和密码:
- 用户名:
- nodemq
- 密码:
- nodenode
客户端将使用以上信息连接部署的MQTT Broker。
Mosquitto Broker
Eclipse Mosquitto是开源的MQTT Broker,支持MQTT协议版本5.0、3.1.1和3.1。
MQTT over TCP
MQTT over TCP使用非加密的TCP连接。配置过程如下:
下载安装程序:https://mosquitto.org/download/。
执行安装程序。若不希望Mosquitto作为Windows服务自动运行,可以在安装设置界面取消Service组件:

安装完成后,创建用于客户端认证的密码文件。假设Mosquitto安装在
C:\Program Files\Mosquitto目录。以管理员身份运行命令提示符(cmd),并切换到Mosquitto安装目录。
创建密码文件
pwfile,并添加用户nodemq,执行:mosquitto_passwd.exe -c pwfile nodemq password要添加用户,执行:
mosquitto_passwd.exe -b pwfile user2 password要删除用户,执行:
mosquitto_passwd.exe -D pwfile user2
修改配置文件
mosquitto.conf(需要管理员权限)。取消password_file注释,并指定密码文件pwfile:password_file pwfile为
mosquitto.exe创建快捷方式。设置快捷方式的目标为:C:\Windows\System32\cmd.exe /k "C:\Program Files\Mosquitto\mosquitto.exe" -c mosquitto.conf -v切换到快捷方式属性的选项标签,在编辑选项中取消 快速编辑模式 和 插入模式:

提示
取消以上选项,避免Windows控制台进程(cmd)因控制台输入而阻塞,导致Mosquitto无响应。
运行快捷方式,即启动Mosquitto默认配置的MQTT Broker,连接信息为:
- 连接地址:
- Mosquitto主机IP
- MQTT over TCP端口:
- 1883
用户名/密码:
pwfile配置。
MQTT over TLS/SSL
MQTT over TLS/SSL使用TLS加密的TCP连接。以自签名证书为例,配置过程如下:
完成 MQTT over TCP 配置。
下载OpenSSL工具:https://slproweb.com/products/Win32OpenSSL.html。
选择Light版本即可。使用默认选项安装,并将
openssl.exe所在目录(例如C:\Program Files\OpenSSL-Win64\bin)添加到系统环境变量Path中。生成自签名证书。以管理员身份运行命令提示符(cmd),并切换到Mosquitto安装目录。执行以下脚本(修改服务器IP地址为Mosquitto主机的实际IP):
cmd@echo off REM 服务器IP地址 set "IP_ADDRESS=192.168.1.100" REM 创建证书存放目录 if not exist certs mkdir certs cd /d certs REM 生成CA私钥 openssl genrsa -out ca.key 4096 REM 生成CA证书 openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 ^ -out ca.crt ^ -subj "/CN=%IP_ADDRESS%" ^ -addext "subjectAltName=IP:%IP_ADDRESS%" REM 生成服务器私钥 openssl genrsa -out server.key 2048 REM 生成服务器证书签名请求CSR openssl req -new -key server.key -out server.csr ^ -subj "/CN=%IP_ADDRESS%" ^ -addext "subjectAltName=IP:%IP_ADDRESS%" REM 用CA签署服务器证书 openssl x509 -req -in server.csr ^ -CA ca.crt -CAkey ca.key -CAcreateserial ^ -out server.crt -days 365 -sha256 ^ -copy_extensions copy脚本会在Mosquitto安装目录下创建
certs目录,并生成以下文件:文件 名称 说明 ca.crt CA根证书 客户端用于验证服务器证书 ca.key CA私钥 不可公开 ca.srl CA证书签发序列号 临时文件 server.crt 服务器证书 服务端用于证明身份 server.csr 服务器证书签名请求 临时文件 server.key 服务器私钥 不可公开 注意
TLS连接会根据服务器证书的SAN(Subject Alternative Name)验证服务器地址,即检查连接的IP地址是否包含在SAN中。当服务器IP地址改变时,需要重新生成包含新IP地址的服务器证书。
修改
mosquitto.conf(需管理员权限)。在# Certificate based SSL/TLS support之前插入以下配置:listener 1883 protocol mqtt listener 8883 protocol mqtt certfile C:\Program Files\Mosquitto\certs\server.crt keyfile C:\Program Files\Mosquitto\certs\server.key cafile C:\Program Files\Mosquitto\certs\ca.crt # ----------------------------------------------------------------- # Certificate based SSL/TLS support # -----------------------------------------------------------------提示
mosquitto.conf是配置文件模板,其中的配置项默认以注释形式提供。以上配置的插入位置仅为了方便查找。
重新启动Mosquitto,启动信息如:

- 连接地址:
- Mosquitto主机IP
- MQTT over TCP端口:
- 1883
- MQTT over TLS/SSL端口:
- 8883
CA证书文件:
C:\Program Files\Mosquitto\certs\ca.crt。用户名/密码:
pwfile配置。
MQTTX
MQTTX是由EMQ开发的一款开源、跨平台MQTT桌面客户端。配置过程如下:
下载安装程序:https://mqttx.app/downloads。
按照常规步骤完成安装。打开MQTTX,在主界面选择新建连接:

根据所使用的MQTT Broker设置连接信息。
EMQX MQTT Broker(参考 部署信息):

- Host协议 -
mqtts://,即MQTT over TLS/SSL。 - Client ID - MQTTX自动生成客户端ID。
- Certificate - 选择
CA signed server certificate,MQTTX客户端按TLS协议自动验证。 - MQTT Version -
3.1.1,与Node-MQ使用的MQTT协议版本一致。
- Host协议 -
Mosquitto MQTT over TCP(参考 连接信息):

- Host协议 -
mqtt://,即MQTT over TCP。 - Client ID - MQTTX自动生成客户端ID。
- MQTT Version -
3.1.1,与Node-MQ使用的MQTT协议版本一致。
- Host协议 -
Mosquitto MQTT over TLS/SSL(参考 连接信息):

- Host协议 -
mqtts://,即MQTT over TLS/SSL。 - Client ID - MQTTX自动生成客户端ID。
- Certificate - 选择
CA or Self signed certif自签名证书。 - CA File - CA证书文件路径。
- MQTT Version -
3.1.1,与Node-MQ使用的MQTT协议版本一致。
- Host协议 -
设置连接信息后,点击 Connect 即连接MQTT Broker。作为Node-MQ测试客户端,请先订阅
node/post主题,以便接收由Node-MQ发来的通知或应答消息。同时,将发送与接收数据格式均设置为JSON。