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

IoT Platform:X.509 証明書ベースの双方向認証を使用して MQTT ゲートウェイデバイスを接続する

最終更新日:Mar 26, 2025

MQTT(Message Queuing Telemetry Transport)ゲートウェイを使用してデバイスを IoT Platform に接続する場合、デバイスと IoT Platform 間の双方向認証を有効にして、デバイスの ID を検証できます。このトピックでは、X.509 証明書ベースの双方向認証を使用してデバイスを IoT Platform に接続する方法について説明します。この例では、認証タイプパラメータが一方検証に設定され、X.509 証明書ベースのデバイス検証を有効にするパラメータがはいに設定されている MQTT ゲートウェイが作成され、サンプル Java コードが提供されます。

前提条件

  • 排他的 Enterprise Edition インスタンスが購入済みであること。この例では、中国 (上海) リージョンで購入された排他的 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 ファイルの内容に設定します。次に、次の図に示すように、他のパラメータを設定します。

    image

  2. [ゲートウェイ] ページで、ゲートウェイの [ゲートウェイ URL] 列の URL をコピーします。

    image

  3. MQTT ゲートウェイ プロダクトにデバイスを追加する。この例では、MQTT ユーザー名 パラメーターが device01 に設定され、MQTT パスワード パラメーターが 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

    image

  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 ユーザー名 パラメーターの値です。

    password

    hello456

    追加されたデバイスの MQTT パスワード パラメーターの値です。

    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 に接続されます。

    image