Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Démo de l'authentification mutuelle CoreMQTT
Important
Cette démo est hébergée sur le Amazon-FreeRTOS référentiel qui est obsolète. Nous vous recommandons de commencer ici lorsque vous créez un nouveau projet. Si vous possédez déjà un projet FreeRTOS basé sur le référentiel désormais Amazon-FreeRTOS obsolète, consultez le. Amazon-FreeRTOS Guide de migration du référentiel Github
Introduction
Le projet de démonstration d'authentification mutuelle CoreMQTT vous montre comment établir une connexion avec un courtier MQTT à l'aide du protocole TLS avec authentification mutuelle entre le client et le serveur. Cette démonstration utilise une implémentation d'interface de TLS-based transport mbed pour établir une connexion TLS authentifiée par le serveur et le client, et illustre le flux de travail d'abonnement/publication de MQTT au niveau QoS 1.
Note
Pour configurer et exécuter les démos de FreeRTOS, suivez les étapes décrites dans. Commencez avec FreeRTOS
Code source
Le fichier source de démonstration est nommé mqtt_demo_mutual_auth.c et se trouve dans le répertoire et GitHubfreertos/demos/coreMQTT/
Fonctionnalité
La démo crée une tâche d'application unique qui passe en revue un ensemble d'exemples illustrant comment se connecter au courtier, s'abonner à une rubrique sur le courtier, publier dans une rubrique sur le courtier, puis enfin, se déconnecter du courtier. L'application de démonstration s'abonne et publie sur le même sujet. Chaque fois que la démo publie un message au broker MQTT, celui-ci renvoie le même message à l'application de démonstration.
Une démonstration réussie générera un résultat similaire à l'image suivante.
La AWS IoT console générera une sortie similaire à l'image suivante.
Réessayez la logique avec un recul et une instabilité exponentiels
La BackoffForRetry fonction prv
Connexion au courtier MQTT
La ConnectToServerWithBackoffRetries fonction prvBackoffAlgorithm_GetNextBackoff fonction fournit une valeur de retard qui augmente de façon exponentielle et revient RetryUtilsRetriesExhausted lorsque le nombre maximum de tentatives a été atteint. La prvConnectToServerWithBackoffRetries fonction renvoie un état d'échec si la connexion TLS au broker ne peut pas être établie après le nombre de tentatives configuré.
La CreateMQTTConnectionWithBroker fonction prvFreeRTOS-Plus/Source/Application-Protocols/platform/freertos/transport/src/tls_freertos.c fichier. N'oubliez pas que nous définissons les secondes pendant lesquelles le courtier doit rester actif. xConnectInfo
La fonction suivante montre comment l'interface de transport TLS et la fonction de temps sont définies dans un contexte MQTT à l'aide de la MQTT_Init fonction. Il montre également comment une fonction de rappel d'événement pointer (prvEventCallback) est définie. Ce rappel est utilisé pour signaler les messages entrants.
Abonnement à un sujet MQTT
La MQTTSubscribeWithBackoffRetries fonction prvRETRY_MAX_ATTEMPTS
Publication dans une rubrique
La MQTTPublishToTopic fonction prv
Réception de messages entrants
L'application enregistre une fonction de rappel d'événement avant de se connecter au broker, comme décrit précédemment. La prvMQTTDemoTask fonction appelle la MQTT_ProcessLoop fonction pour recevoir les messages entrants. Lorsqu'un message MQTT entrant est reçu, il appelle la fonction de rappel d'événements enregistrée par l'application. La EventCallback fonction prvprvEventCallbackexamine le type de paquet entrant et appelle le gestionnaire approprié. Dans l'exemple ci-dessous, la fonction appelle soit à gérer prvMQTTProcessIncomingPublish() les messages de publication entrants, soit prvMQTTProcessResponse() à gérer les accusés de réception (ACK).
Traitement des paquets de publication MQTT entrants
La MQTTProcessIncomingPublish fonction prv
Désinscription d'un sujet
La dernière étape du flux de travail consiste à se désabonner du sujet afin que le courtier n'envoie aucun message publié depuismqttexampleTOPIC. Voici la définition de la fonction prv MQTTUnsubscribeFromTopic
Modification de l'autorité de certification racine utilisée dans la démo
Par défaut, les démos FreeRTOS utilisent le certificat Amazon Root CA 1 (clé RSA 2048 bits) pour s'authentifier auprès du serveur. AWS IoT Core Il est possible d'utiliser d'autres certificats CA pour l'authentification du serveur, notamment le certificat Amazon Root CA 3 (clé ECC 256 bits). Pour modifier l'autorité de certification racine pour la démonstration d'authentification mutuelle CoreMQTT :
-
Dans un éditeur de texte, ouvrez le fichier
.freertos/vendors/vendor/boards/board/aws_demos/config_files/mqtt_demo_mutual_auth_config.h -
Dans le fichier, repérez la ligne suivante.
* #define democonfigROOT_CA_PEM "...insert here..."Décommentez cette ligne et, si nécessaire, déplacez-la au-delà de la fin
*/du bloc de commentaires. -
Copiez le certificat CA que vous souhaitez utiliser, puis collez-le dans le
"...insert here..."texte. Le résultat doit ressembler à l'exemple suivant :#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" -
(Facultatif) Vous pouvez modifier l'autorité de certification racine pour les autres démos. Répétez les étapes 1 à 3 pour chaque
fichier.freertos/vendors/vendor/boards/board/aws_demos/config_files/demo-name_config.h