设备连接鉴权
MQTT-TLS是基于TLS协议的MQTT连接,设备和物联网平台使用发布/订阅模式的MQTT进行通信,TLS协议可以加密通信过程,确保数据的安全性。
背景信息
在进行MQTT CONNECT协议设置时,需注意:
如果同一个设备证书(ProductKey、DeviceName和DeviceSecret)或同一组ProductKey、DeviceName、ClientID、DeviceToken同时用于多个物理设备连接,可能会导致客户端频繁上线、离线。因为新设备连接认证时,原设备会被迫离线,而设备被离线后,又会自动尝试重新连接。
MQTT连接模式中,设备端Link SDK断开后会自动重连。您可以通过日志服务查看设备行为。
MQTT客户端直连
设备使用TCP接入的安全风险非常高,强烈建议使用TLS方式。
为保障通信安全,需使用TLS加密的连接方式。
自行开发设备端,需要使用根证书完成对物联网平台的鉴权。目前有两套根证书:
Tuya IoT平台自签CA证书,该CA根证书长期有效,连接8883端口。
GoGetSSL_RSA CA证书,该CA根证书有效期到2028年09月05日(GMT),连接443端口。证书失效后将无法再用于校验服务器。因此,请确保所有使用TLS加密的设备,均具备更新CA根证书的功能。
无TLS加密的TCP连接,使用1883端口,这是不安全的连接,推荐仅在测试验证时使用,不推荐正式生产环境使用。
使用MQTT客户端连接服务器。
a. 连接方式,请参见开源MQTT客户端。 MQTT协议的更多信息,请参见 MQTT官方文档 。
参数 | 说明 |
接入域名 | 在控制台页面菜单「开发配置」>> 「MQTT」查看MQTT的接入域名,请参见查看和配置实例终端节点信息(Endpoint)。 |
MQTT的CONNECT报文参数 | 一机一密、一型一密预注册认证方式:使用设备证书(ProductKey、DeviceName和DeviceSecret)连接。
重要 此处productKey和deviceName为必填参数,timestamp和clientId为可选参数。若传入timestamp或clientId,必须与mqttClientId中的设置相同。 示例: 假设
加密后的Password为二进制转16制字符串,示例结果为
MQTT签名参数计算方法,请参见如何计算MQTT连接参数 |
MQTT保活
设备端在保活时间间隔内,至少需要发送一次报文,包括ping请求。
连接保活时间的取值范围为30秒~1200秒。建议取值300秒以上。
从物联网平台发送CONNACK响应CONNECT消息时,开始心跳计时。收到PUBLISH、SUBSCRIBE、PING或 PUBACK消息时,会重置计时器。物联网平台每隔30秒定时检测一次设备的保活心跳,设备上线时间点距离最新定时检测时间点的时间,是定时检测的等待时间。定义最大超时时间为:保活心跳时间*1.5+定时检测的等待时间
。超过最大超时时间未收到设备消息,服务器会自动断开连接。
使用java语言计算连接参数并使用paho进行连接
使用TCP建立不加密,不安全的连接,见ConnectTuyaIotPlatformTcpDemo
使用标准证书,建立安全的TLS连接,见ConnectTuyaIotPlatformStandardCertDemo
使用Tuya自签证书,建立安全的TLS连接,见ConnectTuyaIotPlatformSelfSignCertDemo
代码实现了连接参数的计算,需要您替换代码里面的变量productKey、deviceName、deviceSecret、endpoint