Share via


以程式設計方式為 TPM 證明建立裝置佈建服務的個別註冊

本文說明如何使用 Azure IoT 中樞 DPS 服務 SDK 以及範例應用程式,以程式設計方式在 Azure IoT 中樞裝置佈建服務中建立 TPM 裝置的個別註冊。 建立個別註冊後,您可以選擇性地透過此註冊項目將模擬 TPM 裝置註冊到佈建服務。

您可以在 Windows 和 Linux 電腦上執行這些步驟,而本文將使用 Windows 開發電腦。

必要條件

  • 在 Windows 機器上安裝 .NET 6.0 SDK 或更新版本。 您可以使用下列命令來檢查您的版本。

    dotnet --info
    
  • (選擇性) 如果您想要在本文結尾處註冊模擬裝置,請依照建立和佈建模擬 TPM 裝置中的程序操作,直到您取得裝置的簽署金鑰。 請儲存簽署金鑰,因為您稍候會在本文中加以使用。

    注意

    請勿遵循使用 Azure 入口網站建立個別註冊的步驟。

  • 安裝 Node.js v4.0+

  • (選擇性) 如果您想要在本文結尾處註冊模擬裝置,請依照建立和佈建模擬 TPM 裝置中的程序操作,直到您取得裝置的簽署金鑰和註冊識別碼。 請儲存簽署金鑰註冊識別碼,因為您稍候會在本文中加以使用。

    注意

    請勿遵循使用 Azure 入口網站建立個別註冊的步驟。

  • 安裝 Java SE 開發套件 8。 本文稍後會安裝 Java Service SDK (英文)。 其同時適用於 Windows 和 Linux。 本文使用 Windows。

  • 安裝 Maven 3

  • 安裝 Git,並確定路徑已新增至環境變數 PATH

  • (選擇性) 如果您想要在本文結尾處註冊模擬裝置,請依照建立和佈建模擬 TPM 裝置中的程序操作,直到您取得裝置的簽署金鑰。 請記下簽署金鑰註冊識別碼,因為您稍候會在本文中加以使用。

    注意

    請勿遵循使用 Azure 入口網站建立個別註冊的步驟。

取得 TPM 簽署金鑰 (選擇性)

您可以依照本文中的步驟建立範例個別註冊。 在此情況下,您將可在 DPS 中檢視註冊項目,但將無法用它來佈建裝置。

您也可以選擇依照本文中的步驟建立個別註冊,並註冊模擬的 TPM 裝置。 如果您想要在本文結尾處註冊模擬裝置,請依照建立和佈建模擬 TPM 裝置中的程序操作,直到您取得裝置的簽署金鑰。 請儲存簽署金鑰,因為您稍候會在本文中加以使用。

注意

請勿遵循使用 Azure 入口網站建立個別註冊的步驟。

您也可以選擇依照本文中的步驟建立個別註冊,並註冊模擬的 TPM 裝置。 如果您想要在本文結尾處註冊模擬裝置,請依照建立和佈建模擬 TPM 裝置中的程序操作,直到您取得裝置的簽署金鑰和註冊識別碼。 請儲存簽署金鑰註冊識別碼,因為您稍候會在本文中加以使用。

注意

請勿遵循使用 Azure 入口網站建立個別註冊的步驟。

您也可以選擇依照本文中的步驟建立個別註冊,並註冊模擬的 TPM 裝置。 如果您想要在本文結尾處註冊模擬裝置,請依照建立和佈建模擬 TPM 裝置中的程序操作,直到您取得裝置的簽署金鑰。 請記下簽署金鑰註冊識別碼,因為您稍候會在本文中加以使用。

注意

請勿遵循使用 Azure 入口網站建立個別註冊的步驟。

取得佈建服務的連接字串

對於本文中的範例,您將需要複製佈建服務的連接字串。

  1. 登入 Azure 入口網站

  2. 在左側功能表或入口網站頁面上,選取 [所有資源]

  3. 選取您的裝置佈建服務。

  4. 在 [設定] 功能表中,選取 [共用存取原則]

  5. 選取您想要使用的存取原則。

  6. 在 [存取原則] 面板中,複製並儲存主要金鑰連接字串。

    Get provisioning service connection string from the portal.

建立個別註冊範例

本節將說明如何建立 .NET Core 主控台應用程式,以將 TPM 裝置的個別註冊新增至您的佈建服務。

  1. 開啟 Windows 命令提示字元,並瀏覽至您要在其中建立應用程式的資料夾。

  2. 若要建立主控台專案,請執行下列命令:

    dotnet new console --framework net6.0 --use-program-main 
    
  3. 若要新增 DPS 服務 SDK 的參考,請執行下列命令:

    dotnet add package Microsoft.Azure.Devices.Provisioning.Service 
    

    此步驟會下載及安裝 Azure IoT DPS 服務用戶端 NuGet 套件及其相依性,並新增其參考。 此套件包含 .NET 服務 SDK 的二進位檔。

  4. 在編輯器中開啟 Program.cs 檔案。

  5. 將位於檔案頂端的命名空間陳述式取代為下列內容:

    namespace CreateIndividualEnrollment;
    
  6. 在檔案頂端的 namespace 陳述式上方新增下列 using 陳述式:

    using System.Threading.Tasks;
    using Microsoft.Azure.Devices.Provisioning.Service;
    
  7. 將下列欄位新增至 Program 類別,並進行列出的變更。

    private static string ProvisioningConnectionString = "{ProvisioningServiceConnectionString}";
    private const string RegistrationId = "sample-registrationid-csharp";
    private const string TpmEndorsementKey =
        "AToAAQALAAMAsgAgg3GXZ0SEs/gakMyNRqXXJP1S124GUgtk8qHaGzMUaaoABgCAAEMAEAgAAAAAAAEAxsj2gUS" +
        "cTk1UjuioeTlfGYZrrimExB+bScH75adUMRIi2UOMxG1kw4y+9RW/IVoMl4e620VxZad0ARX2gUqVjYO7KPVt3d" +
        "yKhZS3dkcvfBisBhP1XH9B33VqHG9SHnbnQXdBUaCgKAfxome8UmBKfe+naTsE5fkvjb/do3/dD6l4sGBwFCnKR" +
        "dln4XpM03zLpoHFao8zOwt8l/uP3qUIxmCYv9A7m69Ms+5/pCkTu/rK4mRDsfhZ0QLfbzVI6zQFOKF/rwsfBtFe" +
        "WlWtcuJMKlXdD8TXWElTzgh7JS4qhFzreL0c1mI0GCj+Aws0usZh7dLIVPnlgZcBhgy1SSDQMQ==";
    
    // Optional parameters
    private const string OptionalDeviceId = "myCSharpDevice";
    private const ProvisioningStatus OptionalProvisioningStatus = ProvisioningStatus.Enabled;
    
    • ProvisioningServiceConnectionString 預留位置值取代為您在上一節中複製的佈建服務連接字串。

    • 如果您要使用本文搭配建立和佈建模擬 TPM 裝置快速入門來佈建模擬裝置,請將簽署金鑰取代為您在該快速入門中記下的值。 您可以使用該快速入門中建議的值、使用您自己的值,或使用此範例中的預設值來取代裝置識別碼和註冊識別碼。

  8. 將下列方法新增至 Program 類別。 此程式碼會建立個別註冊項目,然後在 ProvisioningServiceClient 上呼叫 CreateOrUpdateIndividualEnrollmentAsync 方法,以將個別註冊新增到佈建服務。

    public static async Task RunSample()
    {
        Console.WriteLine("Starting sample...");
    
        using (ProvisioningServiceClient provisioningServiceClient =
                ProvisioningServiceClient.CreateFromConnectionString(ProvisioningConnectionString))
        {
            #region Create a new individualEnrollment config
            Console.WriteLine("\nCreating a new individualEnrollment object...");
            Attestation attestation = new TpmAttestation(TpmEndorsementKey);
            IndividualEnrollment individualEnrollment =
                    new IndividualEnrollment(
                            RegistrationId,
                            attestation);
    
            // The following parameters are optional. Remove them if you don't need them.
            individualEnrollment.DeviceId = OptionalDeviceId;
            individualEnrollment.ProvisioningStatus = OptionalProvisioningStatus;
            #endregion
    
            #region Create the individualEnrollment
            Console.WriteLine("\nAdding the individualEnrollment to the provisioning service...");
            IndividualEnrollment individualEnrollmentResult =
                await provisioningServiceClient.CreateOrUpdateIndividualEnrollmentAsync(individualEnrollment).ConfigureAwait(false);
            Console.WriteLine("\nIndividualEnrollment created with success.");
            Console.WriteLine(individualEnrollmentResult);
            #endregion
    
        }
    }
    
  9. 最後,將 Main 方法取代為下列幾行:

    static async Task Main(string[] args)
    {
        await RunSample();
        Console.WriteLine("\nHit <Enter> to exit ...");
        Console.ReadLine();
    }
    
  10. 儲存您的變更。

  1. 從工作資料夾中的命令視窗中,執行:

    npm install azure-iot-provisioning-service
    

    此步驟會下載及安裝 Azure IoT DPS 服務用戶端套件及其相依性,並新增其參考。 此套件包含 Node.js 服務 SDK 的二進位檔。

  2. 使用文字編輯器,在工作資料夾中建立 create_individual_enrollment.js 檔案。 將下列程式碼新增至 檔案:

    'use strict';
    
    var provisioningServiceClient = require('azure-iot-provisioning-service').ProvisioningServiceClient;
    
    var serviceClient = provisioningServiceClient.fromConnectionString(process.argv[2]);
    var endorsementKey = process.argv[3];
    
    var enrollment = {
      registrationId: 'first',
      attestation: {
        type: 'tpm',
        tpm: {
          endorsementKey: endorsementKey
        }
      }
    };
    
    serviceClient.createOrUpdateIndividualEnrollment(enrollment, function(err, enrollmentResponse) {
      if (err) {
        console.log('error creating the individual enrollment: ' + err);
      } else {
        console.log("enrollment record returned: " + JSON.stringify(enrollmentResponse, null, 2));
      }
    });
    
  3. 儲存檔案。

  1. 開啟 Windows 命令提示字元。

  2. 複製 Microsoft Azure IoT SDK for Java GitHub 存放庫

    git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
    
  3. 移至範例資料夾:

    cd azure-iot-sdk-java\provisioning\provisioning-service-client-samples\service-enrollment-sample
    
  4. 在編輯器中開啟檔案 \src\main\java\samples\com\microsoft\azure\sdk\iot\ServiceEnrollmentSample.java

  5. [Provisioning Connection String] 取代為您在取得佈建服務的連接字串中複製的連接字串。

    private static final String PROVISIONING_CONNECTION_STRING = "[Provisioning Connection String]";
    
  6. 新增 TPM 裝置詳細資料。 將下列陳述式中的 [RegistrationId][TPM Endorsement Key] 取代為您的簽署金鑰和註冊識別碼。

    private static final String REGISTRATION_ID = "[RegistrationId]";
    private static final String TPM_ENDORSEMENT_KEY = "[TPM Endorsement Key]";
    
    • 如果您要使用本文搭配建立和佈建模擬 TPM 裝置快速入門來佈建模擬裝置,請使用您在該快速入門中記下的註冊識別碼簽署金鑰值。

    • 如果您只要使用本文建立範例個別註冊,而不打算用它來註冊裝置,您可以使用下列簽署金鑰值:

      private static final String TPM_ENDORSEMENT_KEY = "AToAAQALAAMAsgAgg3GXZ0SEs/gakMyNRqXXJP1S124GUgtk8qHaGzMUaaoABgCAAEMAEAgAAAAAAAEAxsj2gUScTk1UjuioeTlfGYZrrimExB+bScH75adUMRIi2UOMxG1kw4y+9RW/IVoMl4e620VxZad0ARX2gUqVjYO7KPVt3dyKhZS3dkcvfBisBhP1XH9B33VqHG9SHnbnQXdBUaCgKAfxome8UmBKfe+naTsE5fkvjb/do3/dD6l4sGBwFCnKRdln4XpM03zLpoHFao8zOwt8l/uP3qUIxmCYv9A7m69Ms+5/pCkTu/rK4mRDsfhZ0QLfbzVI6zQFOKF/rwsfBtFeWlWtcuJMKlXdD8TXWElTzgh7JS4qhFzreL0c1mI0GCj+Aws0usZh7dLIVPnefZcBhgy1SSDQMQ==";
      

      輸入您自己的註冊識別碼值,例如 "myJavaDevice"。

  7. 針對個別註冊,您可以選擇設定 DPS 在將裝置佈建到 IoT 中樞時為其指派的裝置識別碼。 若未指派裝置識別碼,DPS 會使用註冊識別碼作為裝置識別碼。 根據預設,此範例會將 "myJavaDevice" 指派為裝置識別碼。 如果您想要變更裝置識別碼,請修改下列陳述式:

        private static final String DEVICE_ID = "myJavaDevice";
    

    如果您不想指派特定的裝置識別碼,請將下列陳述式註解化:

    individualEnrollment.setDeviceId(DEVICE_ID);
    
  8. 此範例可讓您在個別註冊中設定 IoT 中樞,以將裝置佈建到該處。 此 IoT 中樞必須是先前已連結至佈建服務的中樞。 在本文中,我們會讓 DPS 根據預設配置原則 (平均加權分佈) 從連結的中樞中選擇。 將檔案中的下列陳述式註解化:

    individualEnrollment.setIotHubHostName(IOTHUB_HOST_NAME);
    
  9. 範例會建立、更新、查詢並刪除個別的 TPM 裝置註冊。 若要確認入口網站中的註冊成功,請將檔案結尾處的以下幾行程式碼暫時註解化:

    // *********************************** Delete info of individualEnrollment ************************************
    System.out.println("\nDelete the individualEnrollment...");
    provisioningServiceClient.deleteIndividualEnrollment(REGISTRATION_ID);
    
  10. 儲存您的變更。

執行個別註冊範例

  1. 執行範例:

    dotnet run
    
  2. 成功建立時,命令視窗會顯示新註冊的屬性。

若要執行範例,您需要在上一節中複製的佈建服務連接字串,以及裝置的簽署金鑰。 如果您依照建立和佈建模擬裝置快速入門建立了模擬 TPM 裝置,請使用為該裝置建立的簽署金鑰。 否則,若要建立範例個別註冊,您可以使用下列隨 Node.js 服務 SDK 提供的簽署金鑰:

AToAAQALAAMAsgAgg3GXZ0SEs/gakMyNRqXXJP1S124GUgtk8qHaGzMUaaoABgCAAEMAEAgAAAAAAAEAxsj2gUScTk1UjuioeTlfGYZrrimExB+bScH75adUMRIi2UOMxG1kw4y+9RW/IVoMl4e620VxZad0ARX2gUqVjYO7KPVt3dyKhZS3dkcvfBisBhP1XH9B33VqHG9SHnbnQXdBUaCgKAfxome8UmBKfe+naTsE5fkvjb/do3/dD6l4sGBwFCnKRdln4XpM03zLpoHFao8zOwt8l/uP3qUIxmCYv9A7m69Ms+5/pCkTu/rK4mRDsfhZ0QLfbzVI6zQFOKF/rwsfBtFeWlWtcuJMKlXdD8TXWElTzgh7JS4qhFzreL0c1mI0GCj+Aws0usZh7dLIVPnlgZcBhgy1SSDQMQ==
  1. 若要建立 TPM 裝置的個別註冊,請執行下列命令 (包括命令列引數的括號):

    node create_individual_enrollment.js "<the connection string for your provisioning service>" "<endorsement key>"
    
  2. 成功建立時,命令視窗會顯示新註冊的屬性。

  1. 從命令提示字元中的 azure-iot-sdk-java\provisioning\provisioning-service-client-samples\service-enrollment-sample 資料夾中,執行下列命令以建置範例:

    mvn install -DskipTests
    

    此命令會將 Azure IoT DPS 服務用戶端 Maven 套件下載到您的機器,並建置範例。 此套件包含 Java 服務 SDK 的二進位檔。

  2. 切換至 target 資料夾並執行範例。 上一個步驟中的組建會以下列檔案格式輸出 target 資料夾中的 .jar 檔案:service-enrollment-sample-{version}-with-deps.jar;例如:service-enrollment-sample-1.8.1-with-deps.jar。 您可能需要取代下列命令中的版本。

    cd target
    java -jar ./service-enrollment-sample-1.8.1-with-deps.jar
    
  3. 成功建立時,命令視窗會顯示新註冊的屬性。

若要確認個別註冊是否已建立:

  1. Azure 入口網站中,瀏覽至您的裝置佈建服務執行個體。

  2. 在 [設定] 功能表中,選取 [管理註冊]

  3. 選取 [個別註冊] 索引標籤。您應會看到與您在此範例中使用的註冊識別碼相對應的新註冊項目。

Screenshot that shows verifying enrollment for a C# individual device in the portal.

Screenshot that shows verifying enrollment for a Node.js individual device in the portal.

Screenshot that shows verifying enrollment for a Java individual device in the portal.

註冊模擬裝置 (選擇性)

如果您依照建立和佈建模擬 TPM 裝置快速入門中的步驟佈建了模擬裝置,請繼續進行快速入門中的註冊裝置

如果您依照建立和佈建模擬 TPM 裝置快速入門中的步驟佈建了模擬裝置,請繼續進行快速入門中的註冊裝置

如果您依照建立和佈建模擬 TPM 裝置快速入門中的步驟佈建了模擬裝置,請繼續進行快速入門中的註冊裝置

清除資源

如果您預計要探索 DPS 教學課程,請不要清除本文中建立的資源。 否則請使用下列步驟來刪除本文建立的所有資源。

  1. Azure 入口網站中,瀏覽至您的裝置佈建服務執行個體。

  2. 在 [設定] 功能表中,選取 [管理註冊]

  3. 選取 [個別註冊] 索引標籤。

  4. 選取您在本文中所建立之註冊項目註冊識別碼旁的核取方塊。

  5. 在頁面頂端,選取 [刪除]

  1. 如果您依照建立和佈建模擬 TPM 裝置中的步驟建立了模擬 TPM 裝置,請執行下列步驟:

    1. 在 Azure 入口網站中,瀏覽至已佈建您的裝置的 IoT 中樞。

    2. 在左側功能表的 [裝置管理] 底下,選取 [裝置]

    3. 選取您在本文中所註冊裝置之裝置識別碼旁的核取方塊。

    4. 在窗格頂端,選取 [刪除]

  1. 如果您依照建立和佈建模擬 TPM 裝置中的步驟建立了模擬 TPM 裝置,請執行下列步驟:

    1. 關閉模擬裝置的 TPM 模擬器視窗和範例輸出視窗。

    2. 在 Azure 入口網站中,瀏覽至已佈建您的裝置的 IoT 中樞。

    3. 在左側功能表的 [裝置管理] 底下,選取 [裝置]

    4. 選取您在本文中所註冊裝置之裝置識別碼旁的核取方塊。

    5. 在窗格頂端,選取 [刪除]

  1. 如果您依照建立和佈建模擬 TPM 裝置中的步驟建立了模擬 TPM 裝置,請執行下列步驟:

    1. 關閉模擬裝置的 TPM 模擬器視窗和範例輸出視窗。

    2. 在 Azure 入口網站中,瀏覽至已佈建您的裝置的 IoT 中樞。

    3. 在左側功能表的 [裝置管理] 底下,選取 [裝置]

    4. 選取您在本文中所註冊裝置之裝置識別碼旁的核取方塊。

    5. 在窗格頂端,選取 [刪除]

下一步

在本文中,您以程式設計方式建立了 TPM 裝置的個別註冊項目。 (選擇性) 您已在電腦上建立 TPM 模擬裝置,並使用 Azure IoT 中樞裝置佈建服務將其佈建到 IoT 中樞。 若要進一步探索,請查看下列連結: