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.
CoreMQTT-Demo zur gegenseitigen 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 über ein bestehendes FreeRTOS-Projekt verfügen, das auf dem inzwischen veralteten Amazon-FreeRTOS-Repository basiert, lesen Sie dieLeitfaden zur Migration des kostenlosen RTOS Github-Repositorys von Amazon.
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 Client-authentifizierte TLS-Verbindung herzustellen, und demonstriert den Subscribe-Publishing-Workflow von MQTT auf QoS 1-Ebene
Anmerkung
Um die FreeRTOS-Demos einzurichten und auszuführen, folgen Sie den Schritten unterJetzt kostenlos durchstarten RTOS.
Quellcode
Die Demo-Quelldatei ist benanntmqtt_demo_mutual_auth.c
und befindet sich im
Verzeichnis und GitHubfreertos
/demos/coreMQTT/
Funktionalität
In der Demo wird eine einzelne Anwendungsaufgabe erstellt, die anhand einer Reihe von Beispielen veranschaulicht, wie Sie eine Verbindung zum Broker herstellen, ein Thema auf dem Broker abonnieren, zu einem Thema auf dem Broker veröffentlichen und schließlich die Verbindung zum Broker trennen. 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 an die Demo-Anwendung zurück.
Wird der Befehl erfolgreich ausgeführt, wird Ihnen eine Ausgabe ähnlich der folgenden angezeigt:

DieAWS IoT Konsole wird Ihnen eine Ausgabe ähnlich der folgenden angezeigt:

Wiederholungslogik mit exponentiellem Backoff und Jitter
Die prvBackoffForWiederholungsfunktion
Verbindung zum MQTT-Broker herstellen
Die prvConnectToServerWithBackoffRetriesBackoffAlgorithm_GetNextBackoff
Funktion stellt einen exponentiell ansteigenden Backoff-Wert bereit und kehrt zurück,RetryUtilsRetriesExhausted
wenn die maximale Anzahl von Versuchen erreicht wurde. DieprvConnectToServerWithBackoffRetries
Funktion gibt einen Fehlerstatus zurück, wenn die TLS-Verbindung zum Broker nach der konfigurierten Anzahl von Versuchen nicht hergestellt werden kann.
DieConnectionWithBroker Funktion prvCreateMQTTFreeRTOS-Plus/Source/Application-Protocols/platform/freertos/transport/src/tls_freertos.c
Datei implementiert ist. Denken Sie daran, dass wir die Keep-Alive-Sekunden für den Broker festlegenxConnectInfo
.
Die nächste Funktion zeigt, wie die TLS-Transportschnittstelle und die Zeitfunktion in einem MQTT-Kontext mithilfe derMQTT_Init
Funktion festgelegt werden. Es zeigt auch, wie eine Event-Callback-Funktion pointer (prvEventCallback
) gesetzt wird. Dieser Callback wird für die Meldung eingehender Nachrichten verwendet.
Abonnieren eines MQTT-Themas
DieSubscribeWithBackoffRetries Funktion prvMQTTRETRY_MAX_ATTEMPTS
.
So veröffentlichen Sie in einem Thema
DiePublishToTopic Funktion prvMQTT
Empfangen eingehender Nachrichten
Die Anwendung registriert eine Event-Callback-Funktion, bevor sie eine Verbindung zum Broker herstellt, wie zuvor beschrieben. DieprvMQTTDemoTask
Funktion ruft dieMQTT_ProcessLoop
Funktion auf, um eingehende Nachrichten zu empfangen. Wenn eine eingehende MQTT-Nachricht empfangen wird, wird die von der Anwendung registrierte Event-Callback-Funktion aufgerufen. Die prvEventCallbackprvEventCallback
untersucht den Typ des eingehenden Pakets und ruft den entsprechenden Handler auf. Im folgenden Beispiel ruft die Funktion entweder die BehandlungprvMQTTProcessIncomingPublish()
eingehender Veröffentlichungsnachrichten oderprvMQTTProcessResponse()
die Verarbeitung von Bestätigungen (ACK) auf.
Verarbeitung eingehender MQTT-Publish-Pakete
DieProcessIncomingPublish Funktion prvMQTT
Abmeldung von einem Thema
Der letzte Schritt im Workflow besteht darin, sich vom Thema abzumelden, sodass der Broker keine veröffentlichten Nachrichten von sendetmqttexampleTOPIC
. Hier ist die Definition der Funktion prvMQTTUnsubscribeFromTopic
Ä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 beimAWS IoT Core Server zu authentifizieren. 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 wird die folgende Zeile ausfindig.
* #define democonfigROOT_CA_PEM "...insert here..."
Entkommentieren Sie diese 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