一、为什么需要配置TLS的MQTT服务器?
1.因为配置了TLS的MQTT服务器,可以使得传输数据更安全,满足部分对此需求的客户。
二、如何配置TLS的MQTT服务器?
1.首先在本地电脑搭建openssl环境
2.先区分什么是对称加密和非对称加密,这对理解TLS很关键;对称加密原理是加密解密都使用同一个密钥,而非对称加密是加密和解密使用不同的密钥。
我们需要部署的是使用非对称加密,既公钥加密数据,然后私钥解密的情况被称为加密解密,私钥加密数据,公钥解密一般被称为签名和验证签名。
3.接下来就是使用openssl生成私钥和公钥
在这需要重点提醒,我们使用openssl会生成一个CA根证书,再使用CA根证书生成客户端和服务端的私钥和公钥。(私钥是xxx.key,公钥是xxx.crt)
三、TLS的工作原理是什么?
1.客户端需要加载根证书请求连接服务端,请求内容里包括发送自己的公钥(以证书的形式存储),等待服务端校验对方的证书公钥是否合法(与自己的根证书匹配),校验通过后
服务器加载根证书、发送自己的公钥(存放在证书里)给请求连接的客户端,此时双方正式建立通讯连接,之后双方通讯都是使用对方的公钥证书进行加密发送数据、使用自己的私钥解密接收的数据。
四、证书生成和原理弄明白了,如何搭建MQTT的TLS?并使用桥接程序订阅消息转发至Kafka?
1.先声明本人是在Docker下进行搭建的,可以直接在docker拉取镜像
sudo docker pull toke/mosquitto
2.配置MQTT的配置文件,如果不是很清楚原理,强烈建议去看mosquitto源码里的配置文件说明英文版
链接:官方mosquitto.conf文件 提取码:gvgv
3.在docker上运行MQTT服务器命令如下:
sudo docker run --name eclipse-mosquitto -it -d -v /mosquitto/config/mosquitto.conf:/mosquitto/config/mosquitto.conf -v /mosquitto/ca:/mosquitto/ca -v /mosquitto/config/pwfile:/mosquitto/config/pwfile -v /mosquitto/config/aclfile:/mosquitto/config/aclfile -p 1883:1883 -p 8883:8883 eclipse-mosquitto
具体docker命令不清楚的可以自行Google一下。该命令指后台运行eclipse-mosquitto镜像,-v表示把系统路径下的文件或者文件夹映射到镜像指定的路径下,例如-v /mosquitto/ca:/mosquitto/ca 表示将系统下的/mosquitto/ca文件夹映射到镜像/mosquitto/ca路径下。
4.在windows下,使用MQTT.fx客户端代理工具进行验证服务器是否搭建成功,具体配置如下图:
5.至此完成MQTT之TLS服务器搭建。
五、如何编写桥接程序完成订阅消息并转发到Kafka?
分别参考了
https://docs.emqx.cn/broker/v4.2/development/go.html#mqtt-go-使用示例 最终我本地代码如下链接:我的代码 提取码:gvgv