本文采用8084端口进行连接,是EMQX 默认提供了四个常用的监听器之一,如果需要添加其他类型的监听器,可参考官方文档🔗管理 | EMQX 文档。
本文使用自签名CA,需要提前在Linux系统上安装🔗OpenSSL,具体安装教程请自行搜索。
本文采用SSL/TLS连接,需要提前在EMQX上启用,可参考🔗开启 SSL/TLS 连接| EMQX 文档
openssl version my_root_ca.keyopenssl genrsa -out my_root_ca.key 2048 my_root_ca.pemopenssl req -x509 -new -nodes -key my_root_ca.key -sha256 -days 3650 -out my_root_ca.pem 系统会提示以下信息,对应含义如下(根据下面的内容填就可以了,#后面的不需要填):
You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]: CN # 国家/地区 State or Province Name (full name) [Some-State]:Zhejiang # 省/市 Locality Name (eg, city) []:Hangzhou # 城市 Organization Name (eg, company) [Internet Widgits Pty Ltd]:EMQX # 组织机构(或公司名),如 EMQ Organizational Unit Name (eg, section) []:EMQX # 机构部门,如 EMQX Common Name (e.g. server FQDN or YOUR name) []:none # 通用名称,此处应当设置为服务器域名如 mqtt.emqx.com ... emqx.keyopenssl genrsa -out emqx.key 2048 vi命令创建配置文件:openssl.cnfvi openssl.cnf 文件内容如下,BROKER_ADDRESS 修改为 EMQX 服务器实际的 IP 或 DNS 地址
例如:IP.1 = 127.0.0.1,或 DNS.1 = broker.xxx.com(可以只填IP,把域名DNS那一行删掉)
[req] default_bits = 2048 distinguished_name = req_distinguished_name req_extensions = req_ext x509_extensions = v3_req prompt = no [req_distinguished_name] countryName = CN stateOrProvinceName = Zhejiang localityName = Hangzhou organizationName = EMQX commonName = Server certificate [req_ext] subjectAltName = @alt_names [v3_req] subjectAltName = @alt_names [alt_names] IP.1 = BROKER_ADDRESS DNS.1 = BROKER_ADDRESS 最后Esc+:wq保存并退出。
emqx.csropenssl req -new -key ./emqx.key -config openssl.cnf -out emqx.csr emqx.pemopenssl x509 -req -in ./emqx.csr -CA my_root_ca.pem -CAkey my_root_ca.key -CAcreateserial -out emqx.pem -days 3650 -sha256 -extensions v3_req -extfile openssl.cnf 准备好Server文件(EMQX证书)后,就可以启用EMQX单向认证的SSL/TLS连接功能了
如果需要双向认证或客户端证书和客户端Key文件,用来满足配置nginx等需求的,请继续配置Client文件↓
这一部分原理和内容跟配置Server文件一样,不赘述了,直接放步骤。
openssl genrsa -out client.key 2048 openssl req -new -key ./client.key -config openssl.cnf -out client.csr openssl x509 -req -in ./client.csr -CA my_root_ca.pem -CAkey my_root_ca.key -CAcreateserial -out client.pem -days 3650 -sha256 -extensions v3_req -extfile openssl.cnf emqx.pem、emqx.key 及 my_root_ca.pem 文件拷贝到 EMQX 的 etc/certs/ 目录下,并参考如下配置修改 emqx.conf:## listener.ssl.$name is the IP address and port that the MQTT/SSL ## Value: IP:Port | Port listener.ssl.external = 8084 ## Path to the file containing the user's private PEM-encoded key. ## Value: File listener.ssl.external.keyfile = etc/certs/emqx.key ## Path to a file containing the user certificate. ## Value: File listener.ssl.external.certfile = etc/certs/emqx.pem ## Path to the file containing PEM-encoded CA certificates. The CA certificates ## Value: File listener.ssl.external.cacertfile = etc/certs/my_root_ca.pem 博主8084端口部分修改之后是这样的↓

打开8084端口配置界面,重新设置TLS Cert,TLS Key和CA Cert,分别对应上传emqx.pem,emqx.key,my_root_ca.pem文件
这里类型两个字下面框里的内容要提前设置成wss要不然SSL/TLS连接没法用
另外SSL版本最好是这样
这些章前的参考文档都说明了,这里再提醒一下,其他设置基本默认,出问题回去看官方文档
emqx restart MQTTX官网🔗:MQTTX:全功能 MQTT 客户端工具
官方安装文档🔗:安装 - MQTTX 文档
官方使用文档🔗:MQTT 客户端工具演示 | EMQX 文档
打开MQTTX客户端,添加连接,填写信息:
名称随便填,Client ID随机
服务器地址选择wss://,后面填IP地址,端口8084
SSL安全按钮关闭
证书类型选择CA or Self signed certificates,在CA文件处上传根(CA)证书即可,客户端证书和客户端key文件两栏不填
MQTT版本3.1.1




参考官方使用文档的步骤🔗MQTT 客户端工具演示 | EMQX 文档,创建另一个连接作为消息接受客户端(配置与之前相同),添加订阅,在Topic中输入test
接着在原来的EMQX_SSL_TEST连接重新发送test消息,客户端会收到新消息

除了SSL安全按钮启动和填入客户端证书、key文件之外,与单向认证没有什么区别,具体看图:

至此,所有测试连接成功√,你会在EMQX监听器上看见连接数增加。
参考文章链接:
- EMQ X MQTT 服务器启用 SSL/TLS 安全连接
- 开启 SSL/TLS 连接 | EMQX 文档
- 获取 SSL/TLS 证书 | EMQX 文档
- MQTT 客户端工具演示 | EMQX 文档
- 管理 | EMQX 文档