thingsboard之Mqtt的ssl/tls加密传输
目录
一、安装和配置
-
在ubuntu18.04上安装的thingsboard平台3.3.1版本,过程请参考官网安装文档
-
密钥生成,官网相关配置和脚本文件连接打不开,直接从github下载最新代码,在/thingsboard-master/tools/src/main/shell/中,测试用的python代码在…/main/python/中。
-
keygen.properties文件填写正确的主机名和实际ip,mqtt工具用此Ip访问
分别调用server.keygen.sh和client.keygen.sh脚本生成证书和密钥。
留意脚本输出信息,可从中了解证书和密钥分别是哪个文件。 -
只配置/etc/thingsboard/conf/thingsboard.yml文件即可,不需要像官网中要求的配置thingsboard.conf。两个文件都配置的话,容易程序异常,比如地址被占用等错误
数据库的相关配置:
mqtt ssl的相关配置:务必要和生成证书和密钥的keygen.properties相一致
-
以上配置正确并完毕后,重启平台
sudo service thingsboard restart
二、单向认证
只客户端认证服务端
1.平台添加设备
2.连接工具1:mosquitto
需要在mqttserver.pub.pem所在路径下执行,或者文件带绝对路径也行:
mosquitto_pub -d -h 127.0.0.1 -P 8883 -u mqtt_ssl_tls_one_way_01 -t “v1/devices/me/telemetry” -m ‘{“temperature”:42}’ --cafile mqttserver.pub.pem --tls-version “tlsv1.2” --insecure
3.连接工具2:python
用官网给的python脚本,不过要做以下修改:
a. 有三行print语句,输出内容都要用()括起来,否则报错
b. tls版本要由原来的PROTOCOL_TLSv1改为 PROTOCOL_TLSv1_2,和平台保持一致
c. client.connect的连接,由socket.gethostname改 为’192.168.200.167’,即keygen.properties中所填ip
d. 执行后的输出
可修改脚本,使其能发送数据
4.连接工具3:mqttx
三、双向认证
客户端和服务端互相认证
1. 平台添加设备
把mqttclient.pub.pem内容复制到新加设备的公钥里,即把以下红框内的内容,包括begin和end全复制进去,平台会自动去掉头和尾
2.连接工具1:mosquitto
需要在mqttserver.pub.pem所在路径下执行,或者文件带绝对路径也行
mosquitto_pub -d -h 127.0.0.1 -p 8883 -t “v1/devices/me/telemetry” -m ‘{“temperature”:36.7}’ --cafile “mqttserver.pub.pem” --cert “mqttclient.nopass.pem” --key “mqttclient.nopass.pem” --tls-version “tlsv1.2” --insecure
3. 连接工具2:python
用官网给的python脚本,也要像单向脚本一样修改:
执行后的输出
可修改脚本,使其能发送数据
4.连接工具3:mqttx
四、wireshark截包
双向认包连接,发送一包数据,和断开时的通讯过程
五、日志
使用过程中如有任何问题,可查看日志var/log/thingsboard/thingsboard.log,有详细的错误信息,非常有助于排查错误。