Todos los productos
Search
Centro de documentos

IoT Platform:Conexión mediante MQTT-TLS

Última actualización: Sep 04, 2026

MQTT-TLS utiliza el protocolo TLS para cifrar la comunicación de publicación y suscripción entre los dispositivos e IoT Platform, lo que garantiza la seguridad de los datos.

Información de contexto

Al configurar el protocolo MQTT CONNECT, tenga en cuenta lo siguiente:

  • Si varios dispositivos físicos comparten el mismo certificado de dispositivo (ProductKey, DeviceName y DeviceSecret) o las mismas credenciales (ProductKey, DeviceName, ClientID y DeviceToken), se desconectarán con frecuencia. Un dispositivo recién autenticado fuerza la desconexión del anterior, lo que desencadena intentos automáticos de reconexión.

  • El Link SDK del lado del dispositivo se reconecta automáticamente tras una desconexión. Puede supervisar el comportamiento del dispositivo en Simple Log Service.

Conexión directa de cliente MQTT

Importante

Las conexiones TCP sin cifrado representan un alto riesgo de seguridad y están deshabilitadas de forma predeterminada en las nuevas instancias Enterprise.

  1. Utilice una conexión cifrada con TLS para garantizar una comunicación segura.

    • Link SDK del lado del dispositivo ya incluye el cifrado TLS preconfigurado. No se requiere configuración manual.

    • Si desarrolla su propio cliente de dispositivo, utilice uno de los siguientes certificados raíz para autenticar el servidor de IoT Platform:

      • Recomendado: Certificado autofirmado de Alibaba Cloud IoT Platform. Válido hasta el 4 de julio de 2053. Conéctese al puerto 8883.

        Importante

        Puede utilizar el hash MD5 c7a6afb466713832af778a7bcb6d1aef para verificar la integridad del archivo de certificado.

      • Certificado raíz Global Sign R1. Válido hasta el 28 de enero de 2028. Conéctese al puerto 1883. Tras su vencimiento, los dispositivos deberán actualizar su certificado raíz CA para continuar con la verificación TLS.

    Correspondencia entre puertos y certificados

    Elija el puerto de conexión según el certificado raíz que utilice su dispositivo:

    • Si su dispositivo utiliza el certificado raíz Global Sign R1 (aún no actualizado), conéctese al puerto 443 o 1883.

    • Si su dispositivo utiliza el certificado autofirmado de Alibaba Cloud IoT Platform, conéctese al puerto 8883.

    Impacto del vencimiento del certificado Global Sign R1

    El certificado raíz Global Sign R1 utilizado con el puerto 1883 vence el 28 de enero de 2028. Después de esta fecha:

    • Los dispositivos que dependan del certificado vencido, incluidos aquellos que usan Link SDK o dispositivos desarrollados internamente que no hayan actualizado su certificado raíz CA, no podrán establecer conexiones TLS.

    • Los dispositivos que se conecten mediante MQTT-TCP (sin TLS) no se verán afectados por el vencimiento de este certificado.

    Planes futuros

    Después de 2028, el puerto 1883 dejará de admitir conexiones TLS. Antes de esa fecha, actualice su SDK o el certificado raíz CA en sus dispositivos al certificado autofirmado de Alibaba Cloud IoT Platform, y cambie al puerto 8883 o 443.

  2. Conéctese al servidor mediante un cliente MQTT.

    1. Puede utilizar clientes MQTT de código abierto para conectarse. Consulte también la documentación oficial de MQTT.

      Nota

      Alibaba Cloud no proporciona soporte técnico para código de terceros.

    2. Utilice un SDK del lado del dispositivo para conectarse a IoT Platform . Para consultar un ejemplo en C, revise MQTT connection. Si desarrolla su propio cliente, configure los siguientes parámetros.

      Parámetro

      Descripción

      Nombre de dominio de conexión

      Para los nombres de dominio de conexión MQTT de instancias públicas e instancias Enterprise, consulte View and configure instance endpoints.

      Encabezado variable: Keep Alive

      La instrucción CONNECT debe incluir el intervalo Keep Alive. Rango válido: de 30 a 1,200 segundos. Se recomienda 300 segundos o más (aumente este valor para redes inestables). IoT Platform rechaza las conexiones con valores fuera de rango.

      Consulte los detalles en la sección MQTT keepalive a continuación.

      Parámetros del mensaje MQTT CONNECT

      Para la autenticación prerregistrada One-Device-One-Secret y One-Product-One-Secret: Conéctese mediante un certificado de dispositivo (ProductKey, DeviceName y DeviceSecret).

      mqttClientId: clientId+"|securemode=3,signmethod=hmacsha1,timestamp=132323232|"
      mqttUsername: deviceName+"&"+productKey
      mqttPassword: sign_hmac(deviceSecret,content)
      • mqttClientId: El contenido entre | | corresponde a parámetros de extensión.

      • clientId: ID de cliente personalizado. Longitud máxima: 64 caracteres. Se recomienda utilizar la dirección MAC o el número de serie (SN) del dispositivo para facilitar su identificación.

      • securemode: Modo de seguridad. Valores válidos: 2 (conexión directa TLS) y 3 (conexión directa TCP).

      • signmethod: Algoritmo de firma. Valores válidos: hmacmd5, hmacsha1, hmacsha256.

      • timestamp: Opcional. Hora actual en milisegundos.

      • mqttPassword: Ordene alfabéticamente los parámetros enviados al servidor y fírmelos con el signmethod especificado. Los detalles del cálculo se encuentran en MQTT connection signature example.

      • content: El valor de content es una cadena generada al concatenar los valores de los parámetros (productKey, deviceName, timestamp y clientId) enviados al servidor. Antes de concatenarlos, ordene los parámetros alfabéticamente según sus nombres.

        Importante

        productKey y deviceName son parámetros obligatorios, mientras que timestamp y clientId son opcionales. Si incluye timestamp o clientId, el valor debe coincidir con la configuración de mqttClientId.

      Ejemplo:

      Suponga que clientId = 12345, deviceName = device, productKey = pk, timestamp = 789, signmethod=hmacsha1, and deviceSecret=secret. Los siguientes parámetros se envían a MQTT sobre TCP:

      mqttclientId=12345|securemode=3,signmethod=hmacsha1,timestamp=789|
          mqttUsername=device&pk
          mqttPassword=hmacsha1("secret","clientId12345deviceNamedeviceproductKeypktimestamp789").toHexString(); 

      La contraseña cifrada es una cadena binaria convertida a hexadecimal. A continuación se muestra un ejemplo del resultado:

      FAFD82A3D602B37FB0FA8B7892F24A477F85****

      Para calcular los parámetros de firma MQTT, siga How to calculate MQTT signature parameters.

      Para la autenticación One-Product-One-Secret sin prerregistro: Conéctese mediante ProductKey, DeviceName, ClientID y DeviceToken.

      mqttClientId: clientId+"|securemode=-2,authType=connwl|"
      mqttUsername: deviceName+"&"+productKey
      mqttPassword: deviceToken
      • mqttClientId: El contenido entre | | corresponde a parámetros de extensión.

      • clientId, deviceToken: El ClientID y el DeviceToken obtenidos de Dynamic device registration over MQTT.

      • securemode: Modo seguro. Para la autenticación One-Product-One-Secret sin prerregistro, este parámetro tiene un valor fijo de -2.

      • authType: Método de autenticación. Para la autenticación One-Product-One-Secret sin prerregistro, este parámetro tiene un valor fijo de connwl.

Ejemplos

Los siguientes temas incluyen ejemplos de conexión mediante clientes MQTT de código abierto:

Keepalive de MQTT

El dispositivo debe enviar como mínimo un mensaje (por ejemplo, una solicitud PING) dentro de cada intervalo keepalive.

Rango válido: de 30 a 1,200 segundos. Se recomienda 300 segundos o más.

El temporizador de latido comienza cuando IoT Platform envía un mensaje CONNACK en respuesta a un mensaje CONNECT. El temporizador se reinicia al recibir un mensaje PUBLISH, SUBSCRIBE, PING o PUBACK. IoT Platform comprueba el latido keepalive del dispositivo cada 30 segundos. El tiempo de espera para la detección programada es el periodo transcurrido desde que el dispositivo se conecta hasta la última detección programada. El tiempo máximo de espera se calcula con la siguiente fórmula: (intervalo keepalive × 1.5) + (tiempo de espera para detección programada). Si no se recibe ningún mensaje del dispositivo tras el tiempo máximo de espera, el servidor desconecta automáticamente el dispositivo.