翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
coreMQTT Mutual Authentication デモ
重要
このデモは、非推奨の Amazon-FreeRTOS リポジトリでホストされています。新しいプロジェクトを作成するときは、ここから始めることをお勧めします。現在非推奨の Amazon-FreeRTOS リポジトリをベースにした既存の FreeRTOS プロジェクトが既にある場合は、「Amazon FreeRTOS Github リポジトリ移行ガイド」を参照してください。
序章
coreMQTT Mutual Authentication デモプロジェクトでは、クライアントとサーバー間の相互認証で TLS を使用して MQTT ブローカーへの接続を確立する方法を説明します。このデモでは mbedTLS ベースのトランスポートインターフェイスの実装を使用して、サーバーとクライアント間の認証 TLS 接続を確立し、QoS 1
注記
FreeRTOS デモをセットアップして実行するには、FreeRTOS の開始方法 の手順に従います。
ソースコード
デモのソースファイルの名前は mqtt_demo_mutual_auth.c
で、
ディレクトリと GitHubfreertos
/demos/coreMQTT/
機能
デモでは、ブローカーに接続し、ブローカーのトピックをサブスクライブし、ブローカーのトピックに公開し、最後にブローカーから切断する方法を示す一連の例をループ処理する 1 つのアプリケーションタスクを作成します。デモアプリケーションは、同じトピックをサブスクライブし、公開します。デモが MQTT ブローカーにメッセージを公開するたびに、ブローカーは同じメッセージをデモアプリケーションに送り返します。
デモが正常に完了すると、次の図のような出力が生成されます。
![正常に完了した場合の MQTT デモ端末の出力](images/coremqtt-mad-output.png)
AWS IoT コンソールは、次の図のような出力を生成します。
![正常に完了した場合の MQTT デモコンソールの出力](images/coremqtt-mad-console.png)
エクスポネンシャルバックオフとジッターを使用してロジックを再試行する
prvBackoffForRetry
MQTT ブローカーへの接続
prvConnectToServerWithBackoffRetriesBackoffAlgorithm_GetNextBackoff
関数は指数関数的に増加するバックオフ値を提供し、最大試行回数に達した場合に RetryUtilsRetriesExhausted
を返します。prvConnectToServerWithBackoffRetries
関数は、設定された試行回数に達してもブローカーへの TLS 接続を確立できない場合に、失敗ステータスを返します。
prvCreateMQTTConnectionWithBrokerFreeRTOS-Plus/Source/Application-Protocols/platform/freertos/transport/src/tls_freertos.c
ファイルで実装されます。ブローカーのキープアライブ (秒) は xConnectInfo
で設定することに注意してください。
次の関数は、TLS トランスポートインターフェイスと time 関数が MQTT_Init
関数を使って MQTT コンテキストでどのように設定されるかを示します。また、イベントコールバック関数ポインタ (prvEventCallback
) の設定方法も表しています。このコールバックは、受信メッセージのレポートに使用されます。
MQTT トピックのサブスクライブ
prvMQTTSubscribeWithBackoffRetriesRETRY_MAX_ATTEMPTS
に関してサブスクリプションはエクスポネンシャルバックオフで再試行します。
トピックへの公開
prvMQTTPublishToTopic
受信メッセージの受信
アプリケーションは前述のように、ブローカーに接続する前にイベントコールバック関数を登録します。prvMQTTDemoTask
関数は MQTT_ProcessLoop
関数を呼び出して受信メッセージを受信します。受信 MQTT メッセージを受信すると、受信 MQTT メッセージはアプリケーションが登録したイベントコールバック関数を呼び出します。prvEventCallbackprvEventCallback
は受信パケットタイプを調べ、適切なハンドラを呼び出します。以下の例では、関数は受信した発行メッセージを処理する prvMQTTProcessIncomingPublish()
、確認 (ACK) を処理する prvMQTTProcessResponse()
のいずれかを呼び出します。
受信 MQTT 公開パケットの処理
prvMQTTProcessIncomingPublish
トピックからのサブスクリプションの解除
ワークフローの最後のステップは、ブローカーが mqttexampleTOPIC
から発行されたメッセージを送信しないように、トピックのサブスクライブを解除することです。prvMQTTUnsubscribeFromTopic
デモで使用するルート CA の変更
デフォルトでは、FreeRTOS デモは、Amazon Root CA 1 証明書 (RSA 2048 ビットキー) を使用して AWS IoT Core サーバーと認証します。Amazon Root CA 3 証明書 (ECC 256 ビットキー) など、他のサーバー認証用の CA 証明書も使用できます。coreMQTT Mutual Authentication デモのルート CA を変更するには、次の手順を実行します。
-
テキストエディタで、
ファイルを開きます。freertos
/vendors/vendor
/boards/board
/aws_demos/config_files/mqtt_demo_mutual_auth_config.h -
ファイルで、次の行を見つけます。
* #define democonfigROOT_CA_PEM "...insert here..."
この行のコメントを解除し、必要に応じてコメントブロックの末尾
*/
まで移動させます。 -
使用する CA 証明書をコピーし、
"...insert here..."
テキストに貼り付けます。結果は次の例のようになります。#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"
-
(オプション) 他のデモのルート CA を変更できます。
ファイルごとに、ステップ 1〜3 を繰り返します。freertos
/vendors/vendor
/boards/board
/aws_demos/config_files/demo-name
_config.h