使用TLS加密在MQTT的使用中是比较常见的,TLS加密过程在网上有很多说明,但是没几个应用教程的,MQTT软件中的EMQX软件是支持TLS加密的,只不过要进行一些设置。
安装EMQX软件
首先先安装EMQX软件
软件安装说明
免费下载、试用 EMQ 产品 (emqx.com)https://www.emqx.com/zh/try?product=broker
为了方便测试,选择Ubuntu版本,在虚拟机中安装
安装启动完后,打开浏览器,输入网址localhost:18083或者127.0.0.1:18083
初始默认用户名:admin
密码:public
登录上去后,看到其功能界面
安装OpenSSL
接下来就是安装OpenSSL,来生成自签名证书
软件下载地址:
/source/index.html (openssl.org)https://www.openssl.org/source/
里我选择1.1.1版本
将下好的安装包解压
tar -xvf openssl-1.1.1s.tar.gz
接着进入解压出来的文件夹
cd openssl-1.1.1s/
设置好安装路径
./config --prefix=/usr/local/openssl
然后直接编译并安装
make
sudo make install #安装需要权限
SSL/TLS 证书准备
参考文章链接:https://www.emqx.com/zh/blog/emqx-server-ssl-tls-secure-connection-configuration-guide
首先,我们需要一个自签名的 CA 证书。生成这个证书需要有一个私钥为它签名,可以执行以下命令来生成私钥:
openssl genrsa -out ca.key 2048
这个命令将生成一个密钥长度为 2048 的密钥并保存在 ca.key
中。有了这个密钥,就可以用它来生成 EMQX 的根证书了:
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.pem
查看 CA 证书信息(可选):
openssl x509 -in ca.pem -noout -text
根证书是整个信任链的起点,如果一个证书的每一级签发者向上一直到根证书都是可信的,那个我们就可以认为这个证书也是可信的。有了这个根证书,我们就可以用它来给其他实体签发实体证书了。
实体(在这里指的是 EMQX)也需要一个自己的私钥对来保证它对自己证书的控制权。生成这个密钥的过程和上面类似:
openssl genrsa -out emqx.key 2048
新建 openssl.cnf
文件,
- req_distinguished_name :根据情况进行修改,
- alt_names:
BROKER_ADDRESS
修改为 EMQX 服务器实际的 IP 或 DNS 地址,例如:IP.1 = 127.0.0.1,或 DNS.1 = broker.xxx.com
[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
然后以这个密钥和配置签发一个证书请求:
openssl req -new -key ./emqx.key -config openssl.cnf -out emqx.csr
然后以根证书来签发 EMQX 的实体证书:
openssl x509 -req -in ./emqx.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out emqx.pem -days 3650 -sha256 -extensions v3_req -extfile openssl.cnf
查看 EMQX 实体证书(可选):
openssl x509 -in emqx.pem -noout -text
验证 EMQX 实体证书,确定证书是否正确:
$ openssl verify -CAfile ca.pem emqx.pem
emqx.pem: OK
准备好证书后,我们就可以启用 EMQX 的 TLS/SSL 功能了。
SSL/TLS 启用及验证
将前文中通过 OpenSSL 工具生成的 emqx.pem
、emqx.key
及 ca.pem
文件拷贝到 EMQX 的 /etc/emqx/certs
目录下,并参考如下配置修改 emqx.conf
listeners.ssl.default {
bind = "0.0.0.0:8883"
max_connections = 512000
ssl_options {
keyfile = "/etc/emqx/certs/emqx.key"
certfile = "/etc/emqx/certs/emqx.pem"
cacertfile = "/etc/emqx/certs/ca.pem"
}
}
接着重启EMQX
sudo emqx stop
sudo emqx start
当配置完成并重启 EMQX 后,我们使用 MQTT 客户端工具 - MQTT X(该工具跨平台且支持 MQTT 5.0),来验证 TLS 服务是否正常运行。
- 参照下图在 MQTT X 中创建
MQTT 客户端
(Host 输入框里的127.0.0.1
需替换为实际的 EMQX 服务器 IP,即虚拟机IP)
此时 Certificate 一栏需要选择 Self signed ,并携带自签名证书中生成的 ca.pem 文件。 文章来源:https://www.toymoban.com/news/detail-441374.html
点击 Connect
按钮,连接成功后,如果能正常执行 MQTT 发布/订阅 操作,则自签名证书的 SSL 单向认证配置成功。文章来源地址https://www.toymoban.com/news/detail-441374.html
到了这里,关于MQTT使用TLS加密的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!