AWS IoTを始めよう -MQTTの設定(MQTT.fx編)-

Pocket

大柳です。

前回のAWS IoT記事ではMQTT接続を行うためにAWS IoT側の設定を行いました。
AWS IoTを始めよう -MQTTの設定(AWS IoT編)-
今回は、MQTTクライアント側の設定を行って、AWS IoTとWindows PCでMQTT通信を行います。

MQTTクライアントのインストール

今回はGUIベースのMQTTクライアントであるMQTT.fx(http://mqttfx.jfx4ee.org/)を利用します。
以下からダウンロードしてインストールします。
Windows版の場合はウィザードに従いインストールできます。
http://mqttfx.jfx4ee.org/index.php/download
インストールしたら、MQTT.fxを起動して、接続設定を行います。

MQTT.fxの設定

MQTT.fxを起動して、青い歯車マークをクリックして接続設定を行います。

[Edit Connection Profiles]のウィンドウが開きます。
左下の青い+マークをクリックすると、新しく接続設定を追加できます。

Profile Name等を入力していきます。
Broker Addressには前回記事で確認したAWS IoTのエンドポイントを、PortにはAWS IoT指定の8883を入力します。Client IDは任意の名前で問題ありません。

[SSL/TLS]タブを選択してSSL/TLS通信の設定を行います。
Protocolは[TLSv1.2]を選択します。
[Self signed certificates]を選択して、以下のファイルを指定します。

・CA File…前回記事でダウンロードしたrootCA
・Client Certificate File…前回記事でダウンロードしたA certificate for this thing(サーバ証明書)
・Client Key File…前回記事でダウンロードしたA private key(秘密鍵)

AWS IoTの証明書はPEM形式なので[PEM Formatted]にチェックを入れます。
すべての設定を入力したら、[OK]を選択します。これで接続設定は完了です。

MQTT.fxの接続

トップ画面に戻ったら、[Connect]ボタンを選択します。
しばらくして[Connect]ボタンが薄青色になったら接続完了です。これでAWS IoTとMQTT接続ができるようになりました。
Logタブからも接続成功を確認できます。

クライアントからのPublish(MQTT.fx→AWS IoT)

接続できたのでクライアントからPublish(送信)してみます。
AWS IoTにはMQTTのPublish/Subscribeができるコンソールも提供されています。今回はこれを利用してサーバ側の確認を行います。

まず、AWS IoT側でSubscribe(受信)の準備を行います。
AWS IoTコンソールの左のサイドバーから[Test]を選択します。
Subscribeしたいトピックを入力(以下の例では test/mqtt)して、[Subscribe to topic]を選択します。
左側にSubscribeを開始したトピックが表示されるので、選択します。これでメッセージ待ち受け状態になりました。

MQTT.fxに戻って、Publish(送信)を行います。
トピック(test/mqtt)を入力し、下部のメッセージエリアに送信メッセージを入力します。
[Publish]ボタンを選択するとメッセージが送信されます。
表面上は特にメッセージは出ませんが、Logタブを確認するとメッセージが送信されたことを確認できます。

AWS IoTコンソールに戻ると、メッセージが受信できていることが確認できます。

クライアントでのSubscribe(AWS IoT→MQTT.fx)

続いて逆方向のクライアントでのSubscribe(受信)もやってみます。

MQTT.fx側で[Subscribe]タブを選択し、Subscribeしたいトピックを入力(以下の例では test/mqtt)して、[Subscribe]を選択します。
画面下部にSubscribe開始したトピックが表示され、メッセージ待ち受け状態になります。

AWS IoTコンソールに戻って、トピック(test/mqtt)を入力し、下部のメッセージエリアに送信メッセージを入力します。
[Publish to topic]ボタンを選択するとメッセージが送信されます。
MQTT.fxに戻ると、メッセージの受信が確認できます。

追加検証

追加でいくつか検証してみましたので、その結果も紹介します。

TLS1.1でMQTT接続できるか → NG

MQTT.fxの接続設定ではTLSのバージョン指定ができるので、TLS1.1で接続できるか試してみました。
AWS IoTの仕様通り、接続不可でした。

HTTPSでPublishする → OK

HTTPS + X509証明書でもAWS IoTと接続できます(Publishのみ)。
curlコマンドでHTTPSの通信を試してみました。

コマンド

Publishできました。

HTTPS + TLS1.1でPublishする → NG

最後にHTTPSでもTLS1.1を試してみます。

コマンド

MQTTと同じくHTTPSでもTLS1.1は接続不可でした。

まとめ

MQTTクライアントの設定を行い、AWS IoTと通信できることが確認できました。
AWS IoT側の設定や接続確認の手順を理解できたので、次回は実際にデバイスをAWS IoTにMQTT接続してみます。

次回もお楽しみに。