Skip to content

MQTT Broker与客户端 ​

EMQX Broker ​

EMQX提供多种可伸缩的MQTT Broker云服务。以提供免费额度的Serverless MQTT服务为例,配置过程如下:

  1. 注册EMQX账户:https://accounts-zh.emqx.com/signup。

  2. 完成注册后,登录并按提示创建新项目,填写项目名称并确认:

  3. 打开项目,新建 EMQX Broker:

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

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

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

  7. 至此,即完成了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连接。配置过程如下:

  1. 下载安装程序:https://mosquitto.org/download/。

  2. 执行安装程序。若不希望Mosquitto作为Windows服务自动运行,可以在安装设置界面取消Service组件:

  3. 安装完成后,创建用于客户端认证的密码文件。假设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
  4. 修改配置文件mosquitto.conf(需要管理员权限)。取消password_file注释,并指定密码文件pwfile:

    password_file pwfile
  5. 为mosquitto.exe创建快捷方式。设置快捷方式的目标为:

    C:\Windows\System32\cmd.exe /k "C:\Program Files\Mosquitto\mosquitto.exe" -c mosquitto.conf -v

    切换到快捷方式属性的选项标签,在编辑选项中取消 快速编辑模式 和 插入模式:

    提示

    取消以上选项,避免Windows控制台进程(cmd)因控制台输入而阻塞,导致Mosquitto无响应。

  6. 运行快捷方式,即启动Mosquitto默认配置的MQTT Broker,连接信息为:

    连接地址:
    Mosquitto主机IP
    MQTT over TCP端口:
    1883

    用户名/密码:pwfile配置。

MQTT over TLS/SSL ​

MQTT over TLS/SSL使用TLS加密的TCP连接。以自签名证书为例,配置过程如下:

  1. 完成 MQTT over TCP 配置。

  2. 下载OpenSSL工具:https://slproweb.com/products/Win32OpenSSL.html。

    选择Light版本即可。使用默认选项安装,并将openssl.exe所在目录(例如C:\Program Files\OpenSSL-Win64\bin)添加到系统环境变量Path中。

  3. 生成自签名证书。以管理员身份运行命令提示符(cmd),并切换到Mosquitto安装目录。执行以下脚本(修改服务器IP地址为Mosquitto主机的实际IP):

    ca.cmd
    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.crtCA根证书客户端用于验证服务器证书
    ca.keyCA私钥不可公开
    ca.srlCA证书签发序列号临时文件
    server.crt服务器证书服务端用于证明身份
    server.csr服务器证书签名请求临时文件
    server.key服务器私钥不可公开

    注意

    TLS连接会根据服务器证书的SAN(Subject Alternative Name)验证服务器地址,即检查连接的IP地址是否包含在SAN中。当服务器IP地址改变时,需要重新生成包含新IP地址的服务器证书。

  4. 修改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是配置文件模板,其中的配置项默认以注释形式提供。以上配置的插入位置仅为了方便查找。

  5. 重新启动Mosquitto,启动信息如:

    MQTT Broker连接信息:

    连接地址:
    Mosquitto主机IP
    MQTT over TCP端口:
    1883
    MQTT over TLS/SSL端口:
    8883

    CA证书文件:C:\Program Files\Mosquitto\certs\ca.crt。

    用户名/密码:pwfile配置。

MQTTX ​

MQTTX是由EMQ开发的一款开源、跨平台MQTT桌面客户端。配置过程如下:

  1. 下载安装程序:https://mqttx.app/downloads。

  2. 按照常规步骤完成安装。打开MQTTX,在主界面选择新建连接:

  3. 根据所使用的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协议版本一致。
    • Mosquitto MQTT over TCP(参考 连接信息):

      • Host协议 - mqtt://,即MQTT over TCP。
      • Client ID - MQTTX自动生成客户端ID。
      • MQTT Version - 3.1.1,与Node-MQ使用的MQTT协议版本一致。
    • 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协议版本一致。
  4. 设置连接信息后,点击 Connect 即连接MQTT Broker。作为Node-MQ测试客户端,请先订阅node/post主题,以便接收由Node-MQ发来的通知或应答消息。同时,将发送与接收数据格式均设置为JSON。