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

大柳です。

前回の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を開始したトピックが表示されるので、選択します。これでメッセージ待ち受け状態になりました。

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の通信を試してみました。

コマンド

1curl -D - \2  --tlsv1.2 \3  -X POST \4  --cert ./cert.pem \5  --key ./privateKey.pem \6  --cacert ./rootCA.pem \7  https://abcdefg123hijk.iot.ap-northeast-1.amazonaws.com:8443/topics/test?qos=0 \8  --data "hello"

Publishできました。

HTTPS + TLS1.1でPublishする → NG

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

コマンド

1curl -D - \2  --tlsv1.1 \3  -X POST \4  --cert ./cert.pem \5  --key ./privateKey.pem \6  --cacert ./rootCA.pem \7  https://abcdefg123hijk.iot.ap-northeast-1.amazonaws.com:8443/topics/test?qos=0 \8  --data "hello"

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

まとめ

MQTTクライアントの設定を行い、AWS IoTと通信できることが確認できました。

AWS IoT側の設定や接続確認の手順を理解できたので、次回は実際にデバイスをAWS IoTにMQTT接続してみます。

次回もお楽しみに。

この記事を書いた人

aws-recipe-user