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

IoT Platform:X.509証明書ベースの相互認証を使用したMQTTゲートウェイデバイスの接続

最終更新日:Aug 21, 2026

Message Queuing Telemetry Transport (MQTT) ゲートウェイを使用してデバイスを IoT Platform に接続する際に、デバイスと IoT Platform 間で双方向検証を有効にすることで、デバイスの ID を検証できます。このトピックでは、X.509 証明書ベースの双方向検証を使用してデバイスを IoT Platform に接続する方法について説明します。この例では、Authentication Type パラメーターを One-party Verification に、Enable X.509 certificate-based Device Verification パラメーターを Yes に設定した MQTT ゲートウェイを作成し、Java サンプルコードを提供します。

前提条件

  • Exclusive Enterprise Edition インスタンスが購入済みであること。この例では、中国 (上海) リージョンで Exclusive Enterprise Edition インスタンスを購入します。詳細については、「Enterprise Edition インスタンスの購入」をご参照ください。

  • 相互認証の実行に必要な証明書が準備済みであること。

    この例では、次の証明書ファイルを使用します: ルート証明書ファイル root-ca.crt、サーバー側の秘密鍵ファイル server.key、サーバー側の証明書ファイル server.crt、デバイス側の秘密鍵ファイル client.key、デバイス証明書ファイル client.crt

背景情報

IoT Platform は MQTT ゲートウェイを提供し、X.509 証明書とカスタム証明書を使用してデバイスを検証し、IoT Platform に接続して通信できるようにします。これにより、IoT Platform はさまざまな IoT ビジネスシナリオの要件を満たすことができます。

MQTT ゲートウェイとデバイス間の検証と通信の詳細については、「MQTT ゲートウェイ」をご参照ください。

事前準備

この例では、Java を使用してプログラムを開発します。次の要件を満たす Java 開発環境を準備してください。

ゲートウェイの作成とデバイスの追加

  1. MQTT ゲートウェイを作成 します。[ゲートウェイの追加] ダイアログボックスで、[サーバー証明書] パラメーターを server.crt ファイルの内容に、[サーバー証明書の秘密鍵] パラメーターを server.key ファイルの内容に、[デバイスルート証明書] パラメーターを root-ca.crt ファイルの内容に設定します。次に、他のパラメーターを次のように設定します。

    • [プロトコル][MQTT] に設定

    • [カスタムポート]1883 に設定

    • [認証タイプ][単方向検証] に設定

    • [データ解析の有効化][いいえ] に設定

    • [デバイスの X.509 証明書認証を有効にする][はい] に設定

    • [OCSP の有効化][無効] に設定

  2. [ゲートウェイ] ページで、ゲートウェイの [ゲートウェイ URL] 列にある URL をコピーします。[ゲートウェイ URL] の形式例は iot-{ゲートウェイ識別子}.igw.iothub.aliyuncs.com で、ポート番号は 1883 です。

  3. MQTT ゲートウェイ製品にデバイスを追加します。この例では、[MQTT Username]device01[MQTT Password]hello456 を設定したデバイスを追加します。

デバイスプログラムの開発

  1. aiot-java-dual-auth-demo コードパッケージをダウンロード して解凍します。

  2. IntelliJ IDEA を開き、コードパッケージから aiot-java-demo サンプルプロジェクトをインポートします。

    • pom.xml ファイルに Maven の依存関係を追加します。この例では、次の依存関係を使用します。

         <dependency>
            <groupId>org.eclipse.paho</groupId>
            <artifactId>org.eclipse.paho.mqttv5.client</artifactId>
            <version>1.2.5</version>
          </dependency>
          <dependency>
              <groupId>org.eclipse.paho</groupId>
              <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
              <version>1.2.0</version>
          </dependency>
          <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
          </dependency>
      
          <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcpkix-jdk15on</artifactId>
            <version>1.47</version>
          </dependency>
    • プロジェクトの /src/main/java/com/aliyun/iot ディレクトリには、相互認証の実行に必要な次のプログラムファイルが含まれています。

      • SslUtil.java: デバイス証明書の読み取り

      • Mqtt5TlsApp.java: デバイスの IoT Platform への接続

  3. プロジェクトの pom.xml ファイルで、[Load Maven Changes] をクリックして依存関係パッケージをダウンロードします。

  4. プロジェクトの /src/main ディレクトリに、resources という名前のフォルダーを作成します。

  5. プロジェクトの /src/main/resources ディレクトリに、次の証明書ファイルをインポートします: root-ca.crt (ルート証明書)、client.key (デバイス側の秘密鍵)、および client.crt (デバイス証明書)。

  6. プロジェクトの /src/main/java/com/aliyun/iot/SslUtil.java ファイルで、証明書の生成に使用されるキーを変更します。

    重要

    clientKs.setKeyEntry() 関数に指定されている値 123456 は、証明書の生成に使用されるキーを示します。ビジネスシナリオに基づいて値を変更してください。

    ......
          // 123456 を実際のキー値に置き換えます。
          clientKs.setKeyEntry("private-key", key.getPrivate(), "123456".toCharArray(), new java.security.cert.Certificate[]{clientCertificate});
    ......
  7. プロジェクトの /src/main/java/com/aliyun/iot/Mqtt5TlsApp.java ファイルを開き、デバイス接続パラメーターを変更します。

    ......
            // MQTT 接続パラメーター
            String userName = "device01";
            String password = "hello456";
            String clientId = "test01_client1";
    
            // ルート証明書が格納されているパス。
            String caCertPath = "src/main/resources/root-ca.crt";
            // デバイス証明書が格納されているパス。
            String clientCertPath= "src/main/resources/client.crt";
            // デバイス側の秘密鍵が格納されているパス。
            String clientKeyPath="src/main/resources/client.key";
    
            // MQTT ゲートウェイの URL。
            String broker = "ssl://iot-*******.igw.iothub.aliyuncs.com:1883";
    ......

    パラメーター

    説明

    userName

    device01

    追加したデバイスの [MQTT Username] の値。

    password

    hello456

    追加したデバイスの [MQTT Password] の値。

    clientId

    test01_client1

    (オプション) クライアントの ID。クライアント ID は 1~64 文字である必要があります。デバイスの MAC アドレスまたはシリアル番号 (SN) をクライアント ID として使用することを推奨します。

    caCertPath

    src/main/resources/root-ca.crt

    デバイスルート証明書ファイル root-ca.crt が格納されているプロジェクトパス。

    clientCertPath

    src/main/resources/client.crt

    デバイス証明書ファイル client.crt が格納されているプロジェクトパス。

    clientKeyPath

    src/main/resources/client.key

    デバイス側の秘密鍵ファイル client.key が格納されているプロジェクトパス。

    broker

    ssl://iot-*******.igw.iothub.aliyuncs.com:1883

    デバイスを接続する MQTT ゲートウェイのエンドポイント。形式: ssl://${ゲートウェイエンドポイント}:${ポート番号}

    ${ゲートウェイエンドポイント}${ポート番号} を、保存した [ゲートウェイ URL] のエンドポイントとカスタムポート番号に置き換えます。

  8. Mqtt5TlsApp.java プログラムファイルを実行し、デバイスと IoT Platform 間の相互認証を行います。

    説明

    この例では、Thread.sleep(20000);Mqtt5TlsApp.java ファイルに追加されています。Thread.sleep(20000); コードは、プログラムの実行から 20 秒後に Mqtt5TlsApp.java プログラムを終了させ、デバイスを IoT Platform から切断します。実際のシナリオでは、カスタムコードを記述してデバイスを接続または切断できます。

    実行結果の例を次に示します。デバイスが検証に合格すると、デバイスは IoT Platform に接続されます。

    broker: ssl://iot-xxx.igw.iothub.aliyuncs.com:1883 Connected
    broker available ability, retain is available: true
    broker available ability, shared subscription is available: true
    publish: content finish
    Disconnected