wolfMQTT 2.0.0をリリースしました – 軽量な組み込み型MQTTブローカー

wolfMQTT 2.0.0をリリースしました。
wolfMQTT v2.0.0 のリリースを発表できることを大変嬉しく思います。このリリースは、軽量なMQTTブローカーを主要機能として導入する、重要なマイルストーンとなります。今回のリリースは、wolfMQTTライブラリの大幅な進化を意味し、クライアント専用ライブラリから、組み込みシステム、IoTゲートウェイ、エッジコンピューティングアプリケーション向けの完全なMQTTソリューションへと発展しています。

軽量MQTTブローカー

wolfMQTT v2.0.0 の目玉は、ライブラリに組み込まれた、フル機能搭載で本番環境にも対応可能なMQTTブローカーです。wolfSSL製品すべてに共通する組み込みファーストの理念に基づいて設計されたこのブローカーは、リソース制約のある環境に適した軽量設計でありながら、豊富な機能を提供します。

ブローカーの主な特長

  • MQTT v3.1.1およびv5プロトコルに完全対応 — ブローカーは両方のプロトコルバージョンに対応しており、幅広いMQTTクライアントおよびデバイスとの互換性を確保します。
    保持メッセージ — ブローカーは保持メッセージを保存し、トピックフィルタに一致する新規サブスクライバーに自動的に配信します。メッセージの有効期限間隔(MQTT v5)がサポートされており、保持フラグを設定した空のペイロードをパブリッシュすることで保持メッセージをクリアできます。
  • セッションの永続性 — クライアントが clean_session=0 で接続した場合、切断後もサブスクリプションは保持されます。同じクライアントIDで再接続すると、以前のサブスクリプションが自動的に復元されます。
  • QoS 0、1、2 — 適切なパケットID管理、効果的なQoS計算(パブリッシュQoSとサブスクリプションQoSの最小値)、QoS 2フローに対する完全なPUBREC/PUBREL/PUBCOMP処理など、完全なQoSサポートを提供します。
  • Last Will and Testament (LWT) — クライアントは、予期せぬ切断時に自動的にパブリッシュされるLWTメッセージを登録できます。ブローカーはLWT遅延間隔(MQTT v5)とLWT保持フラグをサポートします。
  • ワイルドカードトピックマッチング — MQTT仕様に準拠した、$プレフィックス付きシステムトピックの適切な処理に加え、MQTTのシングルレベル(+)およびマルチレベル(#)のワイルドカードサブスクリプションを完全にサポートします。
  • 認証 — タイミング攻撃を防ぐため、定数時間文字列比較によるユーザー名/パスワード認証を採用しています。認証情報はwc_ForceZero()関数を使用してメモリから安全に消去されます。

TLSとデュアルポートリスニング

ブローカーは、別々のポート(デフォルトは1883番ポートと8883番ポート)で、プレーンテキストとTLS暗号化されたリスナーを同時にサポートします。TLS設定には、TLS 1.2および1.3、サーバー証明書、クライアント証明書検証による相互TLS認証のサポートを含みます。暗号化接続のみを必要とする環境向けに、TLSのみのモードも利用可能です。

WebSocketトランスポート

wolfMQTT v2.0.0では、ブローカーにWebSocketトランスポートのサポートを追加し、ブラウザベースのクライアントとWebクライアントがWebSocket経由でMQTTに接続できるようになりました。これにより、リアルタイムダッシュボード、Webベースのデバイス管理、ハイブリッドIoTアーキテクチャなど、新たなユースケースで広がります。

wolfIPとの統合

組み込みシステム向けに、本ブローカーはwolfSSLの軽量組み込みTCP/IPスタックであるwolfIPと統合されています。この組み合わせにより、wolfMQTTはフルオペレーティングシステムやサードパーティ製ネットワークスタックなしでベアメタルシステム上で動作します。本ブローカーは、単一イテレーション実行のための協調型MqttBroker_Step() APIを提供しており、スーパーループやRTOSベースの組み込みアーキテクチャに最適です。

組み込みシステム向け設計

本ブローカーは、組み込みシステムの制約を考慮して設計されています。

  • 静的メモリモード:事前割り当て済みの配列により、動的メモリ割り当てが不要になります。クライアント、サブスクリプション、保持メッセージ、バッファサイズには制限の設定が可能です。
  • 動的割り当てモード:リソースが豊富なシステム向けに、動的割り当てにより柔軟なサイズ調整が可能です。
  • プラグイン可能なネットワークバックエンド:コールバックベースのネットワーク抽象化により、POSIXソケット、wolfIP、およびカスタム実装をサポートします。
  • 2つの実行モデル ― ブロッキング型のMqttBroker_Run()メインループ、または協調型マルチタスクのためのノンブロッキング型のMqttBroker_Step()のいずれかを選択してください。

設定はシンプル

ブローカーには、迅速なセットアップのためのコマンドラインインターフェースを用意しています。

-p プレーンポート (デフォルト: 1883)
-s TLSポート (デフォルト: 8883)
-t TLSサポートを有効にする
-V TLSバージョン (12または13)
-c サーバー証明書 (PEM)
-K サーバー秘密鍵 (PEM)
-A 相互TLS用のCA証明書
-u 認証用ユーザー名
-P 認証用パスワード
-w WebSocketリスニングポート
-v ログレベル: 1=エラー、2=情報、3=デバッグ

ビルド時の設定も同様に柔軟で、きめ細かな機能切り替えが可能です。

--enable-broker # ブローカーを有効にする
--disable-broker-retained # 保持メッセージを無効にする
--disable-broker-will # LWTサポートを無効にする
--disable-broker-wildcards # ワイルドカードサブスクリプションを無効にする
--disable-broker-auth # 認証を無効にする
--disable-broker-insecure # 無効にするプレーンテキストリスナー

セキュリティ強化

今回のリリースでは、ライブラリ全体にわたって大幅なセキュリティ強化を行なっています。

  • ネットワークおよびソケットI/Oにおけるオーバーフローチェックを追加
  • デコード関数における負の戻り値の検証チェックを追加
  • パケット処理パイプライン全体におけるエンコードエラーチェックを追加
  • 残りの長さの検証を追加
  • MQTTおよびMQTT-SNコードパス全体にわたる静的解析の修正
  • TLSでVERIFY_NONEを使用した場合のデバッグ警告を追加
  • wm_SemLockにおける競合状態の修正

ファジングインフラストラクチャ

wolfMQTT v2.0.0では、ブローカー向けにlibFuzzerベースのファジングインフラストラクチャを導入し、エッジケースや潜在的なセキュリティ問題の自動検出が可能になりました。このインフラストラクチャは、リリース前に複数の問題を特定し修正するために開発段階で使用されました。

その他の改善点

  • wolfIPクライアントのサポート — ブローカーに加え、MQTTクライアントにもwolfIPのサポートが追加され、ベアメタル組み込みシステムでのクライアント接続が可能になりました。
  • lastErrorフィールド — ネットワークコンテキストに新しいlastErrorフィールドが追加され、TLSエラーコードが保持されるため、診断機能が向上しました。
  • 不具合修正 — MQTT-SNのエンコード/デコード、ワイルドカードマッチング、LWT処理、curlトランスポートなどに関する多数の不具合を修正しました。
  • CI機能強化 — コードスペルチェック、マルチコンパイラテスト、サニタイザーテストのための新しいCIワークフローに加え、ブローカーのエッジケーステストを拡張しました。

wolfMQTTについて


wolfMQTTライブラリは、C言語で記述され、組み込み環境およびRTOS環境向けに最適化されたMQTTプロトコルのクライアントおよびブローカー実装です。MQTT v3.1.1およびv5、MQTTセンサーネットワーク(MQTT-SN)、wolfSSLによるTLS暗号化、QoSレベル0~2をサポートし、FreeRTOS、ThreadX/NetX、Zephyr、ChibiOS、MQX/RTCS、Harmonyなど、幅広いプラットフォームに対応しています。

 

wolfMQTT v2.0.0 の入手
最新リリースのご評価用オープンソース版は、こちらからダウンロードいただけます。

より包括的なリストについては、ChangeLog を参照してください。

ご質問がございましたら、ぜひ info@wolfssl.jp までお問い合わせください。

原文: https://www.wolfssl.com/announcing-wolfmqtt-v2-0-0-a-lightweight-built-in-mqtt-broker/