Node-RED MCUのMQTT in/out ノードで test.mosquitto.orgにSSL/TLSを使ったセキュアな通信を行う

　Node-RED MCUで「MQTT in」や「MQTT out」ノードを使用する際にもSSL/TLSを使用したセキュアな通信を行う事が出来るようになりました。MQTT通信は「MQTT Broker」と呼ぶ仲介役を経由してPublish/Subscribeすることで通信をおこないますので、デバイスとMQTT Broker間の通信にSSL/TLSを使用します。MQTTでは通常TCP/IPの1883ポートで通信を行いますが、一般的にSSL/TLSを使用する場合は8883ポートを使用します。

事例にもよりますが、これまでマイコンデバイスから一旦エッジサーバを介してセ キュアな通信を行っていたケースでもマイコンデバイスから直接セキュアな通信を行う といったように、システムをシンプルにできる可能性があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3012948/d3864427-d435-c3f1-4998-3180b9d54906.png)

・この記事は、実際の事例としてtest.mosquitto.org の証明書を使用してセキュアな通信を行う事例を紹介するものです。以下の取り組みの概要の記事からの実例の紹介です。

https://qiita.com/mshioji/private/00dd35a14e20df84c0d4

これに使用した、[Node-RED MCU Editionについてはこちら](https://github.com/phoddie/node-red-mcu/blob/main/readme.md)をご覧ください。

https://github.com/phoddie/node-red-mcu/

また、この内容は@kitazakiさんの記事で紹介されている書籍、補足書とも連動しています。

https://qiita.com/kitazaki/items/0768eb7484ee3c27f6e1

:::note info
ここではコンピュータ上で操作するコマンド等はUbuntuを事例として紹介します。お試しの場合は、お使いのシステムに応じて読み替えてください。
:::

### test.mosquitto.org にセキュアな通信を行う。
　test.mosquitto.orgは、MQTT通信のテスト用に公開されているMQTT server/brokerで、オープンソースのEclipse mosquittoで運用されています。Node-RED MCUで使用するPEM形式のCAファイル(certificate authority)を下記のリンクより入手します。

 [https://test.mosquitto.org/](https://test.mosquitto.org/)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3012948/58f59ade-ffb9-3968-a49d-3549bc9e9417.png)

#### デバイス側フロー

 デバイスから送信するフローです。シンプルにM5Stackの中央ボタン(pin:38)を押した時にmsg.payloadのメッセージを「MQTT out」ノードでPublishして動作を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3012948/6cc7c947-f4b6-c09e-a86b-1899f38b8b7f.png)

「MQTT out」ノードの設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3012948/04b3125d-7b82-ed12-68db-e9422735cac1.png)

　トピックを設定し、“サーバ”のプルダウンメニューで「新規にmqtt-brokerを追加」を選択し、隣の鉛筆アイコンでmqtt-brokerの設定を開きます。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3012948/912bdf7a-e647-bc9f-07fd-8b117070753e.png)
”サーバ”のフィールドに”test.mosquitto.org”を設定します。
”ポート”には”8883”を設定します。
”TLSを使用”のチェックボックスをマークして、”新規にtls-configを追加”をプルダウンメニューで選択し、隣の鉛筆アイコンを押してtls-configを開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3012948/f94e9bac-68e3-c336-2f2a-b40ab0644f9f.png)

CA証明書の項目にある「↑ファイル」の矢印アイコンを押して、あらかじめサイトからダウンロードしておいたPEM形式のcertificate authorityファイル
”mosquitto.org.crt”を選択します。

設定が完了したら順次更新ボタン/完了ボタンを押して戻り、デプロイした上でNode-RED MCUでデバイスに書き込みます。

#### PC側フロー

　デバイスからPublishしたデータをSubscribeして表示するフローです。こちらもシンプルに、「MQTT in」ノードでSubsccribeしたデータを「debug」ノードで表示します。
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3012948/b32b4d5f-ea8f-d752-d3fa-5ff591beda7c.png)

「MQTT in」ノードの設定
　”サーバ”のプルダウンメニューで、デバイス用のフローで作ったtest.mosquitto.org用のMQTT Broker設定を選択します。
”トピック”にはデバイスからPublishする「MQTT out」ノードに設定したトピックと同じものを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3012948/06d4cc2a-2192-e9bd-65b5-ed3da8d11611.png)

これでデプロイして動作状態にします。
デバイスのセンターボタン（39ピン）を押すと、セットされたメッセージがMQTT Brokerを経由して送り返されてデバッグウインドウに表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3012948/79fe0ba0-8403-1609-0d2d-c7389d187cbe.png)


これで、公開されているテスト用のMQTTブローカー test.mosquitto.org の証明書を使ってセキュアな通信を行う事ができました。

## 関連記事
お待たせしました、Node-RED アドベントカレンダー2023の進行に沿って、各記事へのリンクを更新しました。

https://qiita.com/mshioji/items/3b98aaaab492ff942961

https://qiita.com/mshioji/items/2d333826570f41009447