すべてのプロダクト
Search
ドキュメントセンター

IoT Platform:MQTT-TLS 経由での接続

最終更新日:Jul 25, 2026

MQTT-TLS は TLS プロトコルを使用して、デバイスと IoT Platform 間のパブリッシュ/サブスクライブ通信を暗号化し、データのセキュリティを確保します。

背景情報

MQTT CONNECT プロトコルを設定する際は、次の点にご注意ください:

  • 複数の物理デバイスが同じデバイス証明書 (ProductKey、DeviceName、DeviceSecret) または認証情報 (ProductKey、DeviceName、ClientID、DeviceToken) を共有している場合、頻繁に切断されます。新しく認証されたデバイスは、前のデバイスを強制的にオフラインにし、自動再接続をトリガーします。

  • デバイス側の Link SDK は、切断時に自動的に再接続します。デバイスの動作は Simple Log Service でモニターできます。

MQTT クライアントの直接接続

重要

暗号化されていない TCP 接続はセキュリティリスクが高いため、新しいエンタープライズインスタンスではデフォルトで無効になっています。

  1. TLS 暗号化接続を使用して、安全な通信を確保します。

    • デバイス側の Link SDK には TLS 暗号化が事前設定されています。手動での設定は不要です。

    • 独自のデバイスクライアントを開発する場合は、次のいずれかのルート証明書を使用して IoT Platform サーバーを認証します:

      • 推奨: Alibaba Cloud IoT Platform 自己署名証明書。有効期限は 2053 年 7 月 4 日です。ポート 8883 に接続します。

        重要

        MD5 ハッシュ c7a6afb466713832af778a7bcb6d1aef を使用して、証明書ファイルの整合性を検証できます。

      • Global Sign R1 ルート証明書。有効期限は 2028 年 1 月 28 日です。ポート 1883 に接続します。有効期限が切れた後、デバイスは CA ルート証明書を更新して TLS 検証を継続する必要があります。

    ポートと証明書の対応

    デバイスが使用するルート証明書に基づいて接続ポートを選択します:

    • デバイスが Global Sign R1 ルート証明書 (まだ更新されていない) を使用している場合は、ポート 443 または 1883 に接続します。

    • デバイスが Alibaba Cloud IoT Platform 自己署名証明書を使用している場合は、ポート 8883 に接続します。

    Global Sign R1 証明書の有効期限切れによる影響

    ポート 1883 で使用される Global Sign R1 ルート証明書は、2028 年 1 月 28 日に有効期限が切れます。この日以降:

    • Link SDK を使用しているデバイスや、CA ルート証明書を更新していない自己開発デバイスなど、期限切れの証明書に依存するデバイスは、TLS 接続の確立に失敗します。

    • MQTT-TCP (非 TLS) 経由で接続するデバイスは、この証明書の有効期限切れの影響を受けません。

    今後の計画

    2028 年以降、ポート 1883 は TLS 接続をサポートしなくなります。その日までに、SDK をアップグレードするか、デバイスの CA ルート証明書を Alibaba Cloud IoT Platform 自己署名証明書に更新し、ポート 8883 または 443 に切り替えてください。

  2. MQTT クライアントを使用してサーバーに接続します。

    1. オープンソースの MQTT クライアントを使用して接続できます。MQTT 公式ドキュメントもご参照ください。

      説明

      Alibaba Cloud は、サードパーティのコードに対するテクニカルサポートを提供していません。

    2. デバイス側 SDK を使用して IoT Platform に接続します。C 言語の例については、MQTT 接続をご参照ください。独自のクライアントを開発する場合は、次のパラメーターを設定します。

      パラメーター

      説明

      接続ドメイン名

      パブリックインスタンスおよびエンタープライズインスタンスの MQTT 接続ドメイン名については、インスタンスエンドポイントの表示と設定をご参照ください。

      可変ヘッダー:キープアライブ

      CONNECT 命令には Keep Alive 間隔を含める必要があります。有効範囲:30~1200 秒。推奨:300 秒以上 (不安定なネットワークの場合は値を大きくします)。IoT Platform は、範囲外の値を持つ接続を拒否します。

      詳細は、以下の MQTT キープアライブセクションをご参照ください。

      MQTT CONNECT メッセージパラメーター

      一デバイス一シークレットおよび一プロダクト一シークレットの事前登録認証の場合:デバイス証明書 (ProductKey、DeviceName、DeviceSecret) を使用して接続します。

      mqttClientId: clientId+"|securemode=3,signmethod=hmacsha1,timestamp=132323232|"
      mqttUsername: deviceName+"&"+productKey
      mqttPassword: sign_hmac(deviceSecret,content)
      • mqttClientId| | の間の内容は拡張パラメーターです。

      • clientId:カスタムクライアント ID。最大長:64 文字。識別しやすくするために、デバイスの MAC アドレスまたはシリアル番号 (SN) を使用することを推奨します。

      • securemode:セキュリティモード。有効値:2 (TLS 直接接続) および 3 (TCP 直接接続)。

      • signmethod:署名アルゴリズム。有効値:hmacmd5、hmacsha1、hmacsha256。

      • timestamp:オプション。現在の時刻 (ミリ秒)。

      • mqttPassword:サーバーに送信されるパラメーターをアルファベット順にソートし、指定された `signmethod` を使用して署名します。計算の詳細については、MQTT 接続署名の例をご参照ください。

      • content:`content` の値は、サーバーに送信されるパラメーター (productKeydeviceNametimestampclientId) の値を連結して生成される文字列です。連結する前に、パラメーターを名前のアルファベット順にソートします。

        重要

        productKeydeviceName は必須パラメーターですが、timestampclientId はオプションのパラメーターです。timestamp または clientId を渡す場合、その値は mqttClientId の設定と同じである必要があります。

      例:

      clientId = 12345, deviceName = device, productKey = pk, timestamp = 789, signmethod=hmacsha1, and deviceSecret=secret と仮定します。次のパラメーターが TCP 経由で MQTT に送信されます:

      mqttclientId=12345|securemode=3,signmethod=hmacsha1,timestamp=789|
      mqttUsername=device&pk
      mqttPassword=hmacsha1("secret","clientId12345deviceNamedeviceproductKeypktimestamp789").toHexString(); 

      暗号化されたパスワードは、2 進数から 16 進数への文字列です。以下は結果の例です:

      FAFD82A3D602B37FB0FA8B7892F24A477F85****

      MQTT 署名パラメーターを計算するには、MQTT 署名パラメーターの計算方法に従ってください。

      事前登録なしの一プロダクト一シークレット認証の場合:ProductKey、DeviceName、ClientID、DeviceToken を使用して接続します。

      mqttClientId: clientId+"|securemode=-2,authType=connwl|"
      mqttUsername: deviceName+"&"+productKey
      mqttPassword: deviceToken
      • mqttClientId| | の間の内容は拡張パラメーターです。

      • clientIddeviceTokenMQTT 経由の動的デバイス登録から取得した ClientID と DeviceToken。

      • securemode:セーフモード。事前登録なしの一プロダクト一シークレット認証の場合、このパラメーターは -2 に固定されます。

      • authType:認証方式。事前登録なしの一プロダクト一シークレット認証の場合、このパラメーターは connwl に固定されます。

以下のトピックでは、オープンソースの MQTT クライアントを使用した接続例を示します:

MQTT キープアライブ

デバイスは、キープアライブ間隔ごとに少なくとも 1 つのメッセージ (PING リクエストなど) を送信する必要があります。

有効範囲:30~1,200 秒。推奨:300 秒以上。

ハートビートタイマーは、IoT Platform が CONNECT メッセージに応答して CONNACK メッセージを送信すると開始されます。タイマーは、PUBLISH、SUBSCRIBE、PING、または PUBACK メッセージが受信されるとリセットされます。IoT Platform は、30 秒ごとにデバイスのキープアライブハートビートをチェックします。スケジュールされた検出の待機時間は、デバイスがオンラインになってから最新のスケジュールされた検出までの期間です。最大タイムアウト期間は、次の数式を使用して計算されます: (keepalive interval × 1.5) + (waiting time for scheduled detection)。最大タイムアウト期間が経過してもデバイスからメッセージが受信されない場合、サーバーはデバイスを自動的に切断します。