You dont have javascript enabled! Please enable it!
FI-BB

MQTT の通信チャネルのセキュア化

本記事では、クラウド上の FIWARE 基盤に IoT デバイスから測定データを定期的に送信したり、FIWARE 基盤から IoT デバイスを制御したり、する方法を紹介します。

本記事を含め、次の複数の記事から構成されています。

通信チャネルのセキュア化

構築した FIWARE 基盤は、MQTT over TLS をサポートしていて、MQTT メッセージを送ることができる暗号化された通信チャネルを提供します。TLS は通信内容が第三者によって読み取られたり変更されたりすることを困難にします。

IoT デバイスを MQTT over TLS 対応にすれば、クラウドの FIWARE 基盤と安全な通信ができます。プログラムに次の変更を加えることで、MQTT over TLS に対応できます。

MQTT over TLS 対応の設定変更

ルート証明書の追加

ルート証明書をグローバル変数として追加します。ルート証明書は、openssl コマンドを使って取得します。

openssl s_client -connect mosquitto.example.com:8883 -showcerts

構築した FIWARE 基盤は、Let’s encrypt のサーバ証明書を使っているので、以下の行のあとにある、BEGIN CERTIFICATE から END CERTIFICATE の行です。

i:O = Digital Signature Trust Co., CN = DST Root CA X3

プログラムには次のように追加します。

WiFiClient のセキュア化

WiFiClentSecure.h のヘッダファイルを追加します。

#include <WiFiClientSecure.h>

WiFiClient クラスの代わりに、WiFiClientSecure クラスを使って、gWifiClient オブジェクトをグローバル変数として定義します。

WiFiClientSecure gWifiClient;

そして、setup() 関数の中に、gWifiClient に対してルート証明書のグローバル変数 gRootCa をセットする処理を追加します。

gWifiClient.setCACert(gRootCa);

MQTT ポートの変更

MQTT 通信に使用するポートを 1883 から 8883 に変更します。

const int gMqttPort = 8883;

MQTT over TLS 対応プログラム

MQTT over TLS に対応したプログラムは以下です。

  • m5stack_fire/m5stack_fire_sensor_mqtt_over_tls/m5stack_fire_sensor_mqtt_over_tls.ino
  • m5stack_fire/m5stack_fire_actuator_mqtt_over_tls/m5stack_fire_actuator_mqtt_over_tls.ino

プログラム全体

センサの測定値を FIWARE 基盤に送信するプログラム を以下に示します。

error: Alert: Content is protected !!