Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Demostración de la autenticación mutua de coreMQTT
importante
Esta demostración está alojada en el Amazon-FreeRTOS repositorio, que está en desuso. Recomendamos empezar por aquí al crear un nuevo proyecto. Si ya tiene un proyecto de Freertos existente basado en el Amazon-FreeRTOS repositorio ahora obsoleto, consulte la. Amazon-FreeRTOS Guía de migración del repositorio de Github
Introducción
El proyecto de demostración de autenticación mutua de coreMQTT muestra cómo establecer una conexión con un agente HTTP mediante TLS con autenticación mutua entre el cliente y el servidor. Esta demostración utiliza una implementación de interfaz de TLS-based transporte mbed para establecer una conexión TLS autenticada por el servidor y el cliente, y muestra el flujo de trabajo de suscripción y publicación de MQTT en el nivel de QoS 1.
nota
Para configurar y ejecutar las demostraciones de FreeRTOS, siga los pasos que se indican en Introducción a FreeRTOS.
Código fuente
El archivo fuente de la demostración lleva un nombre mqtt_demo_mutual_auth.c y se encuentra en el directorio y en el sitio web. GitHubfreertos/demos/coreMQTT/
Funcionalidad
La demostración crea una única tarea de aplicación que recorre un conjunto de ejemplos que muestran cómo conectarse al agente, suscribirse a un tema en el agente, publicar en un tema en el agente y, por último, desconectarse del agente. La aplicación de demostración se suscribe y publica en el mismo tema. Cada vez que la demostración publica un mensaje en el agente de MQTT, este envía el mismo mensaje a la aplicación de demostración.
Si se completa correctamente la demostración, se generará una salida similar a la de la siguiente imagen.
La AWS IoT consola generará un resultado similar al de la imagen siguiente.
Reintento de la lógica con retroceso exponencial y fluctuación
La BackoffForRetry función prv
Conexión al agente de MQTT
La ConnectToServerWithBackoffRetries función prvBackoffAlgorithm_GetNextBackoff proporciona un valor de retroceso que aumenta exponencialmente y devuelve RetryUtilsRetriesExhausted cuando se alcanza el número máximo de intentos. La función prvConnectToServerWithBackoffRetries devuelve un estado de error si no se puede establecer la conexión TLS con el agente tras el número de intentos configurado.
La CreateMQTTConnectionWithBroker función prvFreeRTOS-Plus/Source/Application-Protocols/platform/freertos/transport/src/tls_freertos.c. Tenga en cuenta que estamos configurando los segundos de permanencia activa para el agente en xConnectInfo.
La siguiente función muestra cómo se configuran la interfaz de transporte TLS y la función de tiempo en un contexto MQTT mediante la función MQTT_Init. También muestra cómo se configura un puntero de la función de devolución de llamada de eventos (prvEventCallback). Esta devolución de llamada se utiliza notificar los mensajes entrantes.
Suscripción a un tema de MQTT
La MQTTSubscribeWithBackoffRetries función prvRETRY_MAX_ATTEMPTS.
Publicación de un tema
La MQTTPublishToTopic función prv
Recepción de mensajes entrantes
La aplicación registra una función de devolución de llamada de eventos antes de conectarse al agente, tal y como se ha descrito anteriormente. La función prvMQTTDemoTask llama a la función MQTT_ProcessLoop para recibir los mensajes entrantes. Cuando se recibe un mensaje MQTT entrante, llama a la función de devolución de llamada del evento registrada por la aplicación. La función prvprvEventCallbackexamina el tipo de paquete entrante y llama al controlador correspondiente. En el ejemplo siguiente, la función llama a prvMQTTProcessIncomingPublish() para gestionar los mensajes de publicación entrantes o a prvMQTTProcessResponse() para gestionar los acuses de recibo (ACK).
Proceso de paquetes de publicación MQTT entrantes
La MQTTProcessIncomingPublish función prv
Cancelación de la suscripción a un tema
El último paso del flujo de trabajo consiste en cancelar la suscripción al tema para que el agente no envíe ningún mensaje publicado desde mqttexampleTOPIC. Esta es la definición de la función prv. MQTTUnsubscribeFromTopic
Cambio de la CA raíz utilizada en la demostración
De forma predeterminada, las demostraciones de FreeRTOS utilizan el certificado Amazon Root CA 1 (clave RSA de 2048 bits) para autenticarse en el servidor. AWS IoT Core Es posible utilizar otros certificados CA para la autenticación del servidor, incluido el certificado CA raíz 3 de Amazon (clave ECC de 256 bits). Para cambiar la CA raíz de la demostración de autenticación mutua coreMQTT:
-
Abra el archivo
en un editor de texto.freertos/vendors/vendor/boards/board/aws_demos/config_files/mqtt_demo_mutual_auth_config.h -
En el archivo, localice la línea siguiente.
* #define democonfigROOT_CA_PEM "...insert here..."Elimine el comentario de esta línea y, si es necesario, muévala más allá del extremo del bloque de comentarios
*/. -
Copie el certificado CA que desee utilizar y péguelo en el texto
"...insert here...". El resultado debe ser similar al siguiente ejemplo:#define democonfigROOT_CA_PEM "-----BEGIN CERTIFICATE-----\n"\ "MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5\n"\ "MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g\n"\ "Um9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG\n"\ "A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg\n"\ "Q0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl\n"\ "ui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j\n"\ "QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr\n"\ "ttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr\n"\ "BqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM\n"\ "YyRIHN8wfdVoOw==\n"\ "-----END CERTIFICATE-----\n" -
(Opcional) Puede cambiar la CA raíz para otras demostraciones. Repita los pasos 1 a 3 para cada archivo
.freertos/vendors/vendor/boards/board/aws_demos/config_files/demo-name_config.h