大柳です。
前回の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の通信を試してみました。
コマンド
1 2 3 4 5 6 7 8 |
curl -D - \ --tlsv1.2 \ -X POST \ --cert ./cert.pem \ --key ./privateKey.pem \ --cacert ./rootCA.pem \ https://abcdefg123hijk.iot.ap-northeast-1.amazonaws.com:8443/topics/test?qos=0 \ --data "hello" |
Publishできました。
HTTPS + TLS1.1でPublishする → NG
最後にHTTPSでもTLS1.1を試してみます。
コマンド
1 2 3 4 5 6 7 8 |
curl -D - \ --tlsv1.1 \ -X POST \ --cert ./cert.pem \ --key ./privateKey.pem \ --cacert ./rootCA.pem \ https://abcdefg123hijk.iot.ap-northeast-1.amazonaws.com:8443/topics/test?qos=0 \ --data "hello" |
MQTTと同じくHTTPSでもTLS1.1は接続不可でした。
まとめ
MQTTクライアントの設定を行い、AWS IoTと通信できることが確認できました。
AWS IoT側の設定や接続確認の手順を理解できたので、次回は実際にデバイスをAWS IoTにMQTT接続してみます。
次回もお楽しみに。