Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Demo zur gegenseitigen CoreMQTT-Authentifizierung
Wichtig
Diese Demo wird im Amazon-FreeRTOS-Repository gehostet, das veraltet ist. Wir empfehlen, dass Sie hier beginnen, wenn Sie ein neues Projekt erstellen. Wenn Sie bereits ein vorhandenes FreeRTOS-Projekt haben, das auf dem inzwischen veralteten Amazon-FreeRTOS-Repository basiert, finden Sie weitere Informationen unter. Leitfaden zur Migration des Amazon-FreerTOS Github-Repositorys
Einführung
Das Demo-Projekt zur gegenseitigen Authentifizierung von CoreMQTT zeigt Ihnen, wie Sie mithilfe von TLS eine Verbindung zu einem MQTT-Broker mit gegenseitiger Authentifizierung zwischen dem Client und dem Server herstellen. Diese Demo verwendet eine MbedTLS-basierte Transportschnittstellenimplementierung, um eine server- und clientauthentifizierte TLS-Verbindung herzustellen, und demonstriert den Subscribe-Publish-Workflow von MQTT auf QoS-1-Ebene.
Anmerkung
Folgen Sie den Schritten unter, um die FreeRTOS-Demos einzurichten und auszuführen. Erste Schritte mit FreeRTOS
Quellcode
Die Demo-Quelldatei ist benannt mqtt_demo_mutual_auth.c
und befindet sich im
Verzeichnis und auf der Website. GitHubfreertos
/demos/coreMQTT/
Funktionalität
Die Demo erstellt eine einzelne Anwendungsaufgabe, die eine Reihe von Beispielen durchläuft, die zeigen, wie eine Verbindung zum Broker hergestellt, ein Thema auf dem Broker abonniert, ein Thema auf dem Broker veröffentlicht und schließlich die Verbindung zum Broker getrennt wird. Die Demo-Anwendung abonniert und veröffentlicht dasselbe Thema. Jedes Mal, wenn die Demo eine Nachricht an den MQTT-Broker veröffentlicht, sendet der Broker dieselbe Nachricht zurück an die Demo-Anwendung.
Bei erfolgreichem Abschluss der Demo wird eine Ausgabe generiert, die der folgenden Abbildung ähnelt.

Die AWS IoT Konsole generiert eine Ausgabe, die der folgenden Abbildung ähnelt.

Wiederholen Sie die Logik mit exponentiellem Backoff und Jitter
Die prvBackoffForWiederholungsfunktion
Verbindung zum MQTT-Broker herstellen
Die prvConnectToServerWithBackoffRetriesBackoffAlgorithm_GetNextBackoff
Funktion liefert einen exponentiell steigenden Backoff-Wert und kehrt zurück, RetryUtilsRetriesExhausted
wenn die maximale Anzahl von Versuchen erreicht wurde. Die prvConnectToServerWithBackoffRetries
Funktion gibt einen Fehlerstatus zurück, wenn die TLS-Verbindung zum Broker nach der konfigurierten Anzahl von Versuchen nicht hergestellt werden kann.
Die MQTTConnection WithBroker Funktion PrvCreateFreeRTOS-Plus/Source/Application-Protocols/platform/freertos/transport/src/tls_freertos.c
Denken Sie daran, dass wir die Keep-Alive-Sekunden für den Broker festlegen. xConnectInfo
Die nächste Funktion zeigt, wie die TLS-Transportschnittstelle und die Zeitfunktion mithilfe der Funktion in einem MQTT-Kontext eingestellt werden. MQTT_Init
Sie zeigt auch, wie eine Event-Callback-Funktion pointer (prvEventCallback
) gesetzt wird. Dieser Callback wird für die Meldung eingehender Nachrichten verwendet.
Ein MQTT-Thema abonnieren
Die MQTTSubscribe WithBackoffRetries Funktion prvRETRY_MAX_ATTEMPTS
So veröffentlichen Sie in einem Thema
Die MQTTPublishToTopicprv-Funktion
Empfangen eingehender Nachrichten
Die Anwendung registriert eine Rückruffunktion für Ereignisse, bevor sie eine Verbindung zum Broker herstellt, wie zuvor beschrieben. Die prvMQTTDemoTask
Funktion ruft die MQTT_ProcessLoop
Funktion auf, um eingehende Nachrichten zu empfangen. Wenn eine eingehende MQTT-Nachricht empfangen wird, ruft sie die von der Anwendung registrierte Event-Callback-Funktion auf. Die prvEventCallbackprvEventCallback
untersucht den Typ des eingehenden Pakets und ruft den entsprechenden Handler auf. Im folgenden Beispiel ruft die Funktion entweder die Verarbeitung prvMQTTProcessIncomingPublish()
eingehender Veröffentlichungsnachrichten oder die Verarbeitung von Bestätigungen (ACK) prvMQTTProcessResponse()
auf.
Verarbeitung eingehender MQTT-Veröffentlichungspakete
Die MQTTProcess IncomingPublish Funktion prv
Abmeldung von einem Thema
Der letzte Schritt im Workflow besteht darin, das Abonnement des Themas zu kündigen, sodass der Broker keine veröffentlichten Nachrichten von sendet. mqttexampleTOPIC
Hier ist die Definition der Funktion prv MQTTUnsubscribe FromTopic
Änderung der in der Demo verwendeten Root-CA
Standardmäßig verwenden die FreeRTOS-Demos das Amazon Root CA 1-Zertifikat (RSA 2048-Bit-Schlüssel), um sich beim Server zu authentifizieren. AWS IoT Core Es ist möglich, andere CA-Zertifikate für die Serverauthentifizierung zu verwenden, einschließlich des Amazon Root CA 3-Zertifikats (ECC 256-Bit-Schlüssel). Um die Root-CA für die Demo zur gegenseitigen CoreMQTT-Authentifizierung zu ändern:
-
Öffnen Sie die Datei
in einem Texteditor.freertos
/vendors/vendor
/boards/board
/aws_demos/config_files/mqtt_demo_mutual_auth_config.h -
Suchen Sie in der Datei nach der folgenden Zeile.
* #define democonfigROOT_CA_PEM "...insert here..."
Entfernen Sie den Kommentar zu dieser Zeile und verschieben Sie sie gegebenenfalls über das Ende
*/
des Kommentarblocks hinaus. -
Kopieren Sie das CA-Zertifikat, das Sie verwenden möchten, und fügen Sie es dann in den
"...insert here..."
Text ein. Das Ergebnis sollte wie folgt aussehen:#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"
-
(Optional) Sie können die Stammzertifizierungsstelle für andere Demos ändern. Wiederholen Sie die Schritte 1 bis 3 für jede
Datei.freertos
/vendors/vendor
/boards/board
/aws_demos/config_files/demo-name
_config.h