Schnellstart: Registrieren eines einzelnen Geräts bei IoT Hub Device Provisioning Service mithilfe des TPM-Nachweises

In diesem Artikel wird veranschaulicht, wie Sie programmgesteuert eine individuelle Registrierung für ein TPM-Gerät in Azure IoT Hub Device Provisioning Service erstellen, indem Sie das Microsoft Azure IoT SDK und eine Beispielanwendung verwenden. Mit diesem Eintrag für die individuelle Registrierung können Sie ein simuliertes TPM-Gerät optional für den Bereitstellungsdienst registrieren.

Diese Schritte funktionieren für Windows- und Linux-Computer, aber in diesem Artikel wird nur ein Windows-Entwicklungscomputer verwendet.

Voraussetzungen

Wenn Sie kein Azure-Abonnement haben, erstellen Sie ein kostenloses Azure-Konto, bevor Sie beginnen.

  • Installieren Sie Visual Studio 2019.

  • Installieren Sie das .NET Core 3.1 SDK oder höher auf Ihrem Windows-Computer. Sie können den folgenden Befehl ausführen, um Ihre Version zu überprüfen:

    dotnet --info
    
  • (Optional) Wenn Sie am Ende dieser Schnellstartanleitung ein simuliertes Gerät registrieren möchten, können Sie die Schritte unter Schnellstart: Bereitstellen eines simulierten TPM-Geräts bis zu dem Schritt ausführen, in dem Sie einen Endorsement Key für das Gerät abrufen. Speichern Sie den Endorsement Key, die Registrierungs-ID und optional die Geräte-ID.

  • Installieren Sie Java SE Development Kit 8. In dieser Schnellstartanleitung wird weiter unten das Java Service SDK installiert. Es funktioniert sowohl unter Windows als auch unter Linux. In dieser Schnellstartanleitung wird Windows verwendet.

  • Installieren Sie Maven 3.

  • Installieren Sie Git, und stellen Sie sicher, dass der Pfad der Umgebungsvariablen PATH hinzugefügt wurde.

Hinweis

Führen Sie die Schritte zum Erstellen einer individuellen Registrierung mit dem Azure-Portal nicht aus.

Vorbereiten der Entwicklungsumgebung

Einrichten von Umgebungsvariablen

So richten Sie Umgebungsvariablen ein

  1. Die Variable PATH sollte den vollständigen Pfad zum Verzeichnis jdk1.8.x\bin enthalten. Falls dies die erste Java-Installation Ihres Computers ist, sollten Sie eine neue Umgebungsvariable mit dem Namen JAVA_HOME erstellen und dafür auf den vollständigen Pfad zum Verzeichnis jdk1.8.x verweisen. Auf einem Windows-Computer befindet sich dieses Verzeichnis im Ordner C:\Programmdateien\Java\. Sie können Umgebungsvariablen erstellen oder bearbeiten, indem Sie in der Systemsteuerung Ihres Windows-Computers nach Systemumgebungsvariablen bearbeiten suchen.

    Sie können überprüfen, ob die Java-Einrichtung auf Ihrem Computer erfolgreich war, indem Sie im Befehlsfenster den folgenden Befehl ausführen:

    java -version
    
  2. Bearbeiten Sie die Umgebungsvariable PATH so, dass sie auf den Ordner apache-maven-3.x.x\bin in dem Ordner verweist, in dem Sie Maven extrahiert haben. Sie können sicherstellen, dass die Installation von Maven erfolgreich war, indem Sie diesen Befehl in Ihrem Befehlsfenster ausführen:

    mvn --version
    
  3. Stellen Sie sicher, dass git auf Ihrem Computer installiert ist und der Umgebungsvariablen PATH hinzugefügt wurde.

Klonen eines Git-Repositorys für das Azure IoT Java SDK

So klonen Sie das Azure IoT Java SDK

  1. Öffnen Sie eine Eingabeaufforderung.

  2. Klonen Sie das GitHub-Repository für das Codebeispiel zur Geräteregistrierung, indem Sie das Java-Dienst-SDK verwenden:

    git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
    

Abrufen der Verbindungszeichenfolge für Ihren Bereitstellungsdienst

Für das Beispiel in dieser Schnellstartanleitung müssen Sie die Verbindungszeichenfolge für Ihren Bereitstellungsdienst kopieren.

  1. Melden Sie sich beim Azure-Portal an.

  2. Wählen Sie im Menü auf der linken Seite oder auf der Portalseite die Option Alle Ressourcen aus.

  3. Wählen Sie Ihre Device Provisioning Service-Instanz aus.

  4. Wählen Sie im Menü Einstellungen die Option Richtlinien für gemeinsamen Zugriff aus.

  5. Wählen Sie die Zugriffsrichtlinie aus, die Sie verwenden möchten.

  6. Kopieren Sie im Bereich Zugriffsrichtlinie die Primärschlüssel-Verbindungszeichenfolge, und speichern Sie sie.

    Get provisioning service connection string from the portal.

Erstellen des Beispiels für die individuelle Registrierung

Dieser Abschnitt zeigt, wie Sie eine .NET Core-Konsolen-App erstellen, die Ihrem Bereitstellungsdienst eine individuelle Registrierung für ein TPM-Gerät hinzufügt. Wenn Sie diese Schritte etwas abwandeln, können Sie damit auch eine Windows IoT Core-Konsolen-App zum Hinzufügen der individuellen Registrierung erstellen. Weitere Informationen zum Entwickeln mit IoT Core finden Sie in der Dokumentation zu Windows für IOT.

  1. Öffnen Sie Visual Studio, und wählen Sie Neues Projekt erstellen aus.

  2. Wählen Sie im Bereich Neues Projekt erstellen die Option Konsolenanwendung aus.

  3. Wählen Sie Weiter aus.

  4. Geben Sie unter Projektname den Namen CreateEnrollmentGroup ein.

  5. Wählen Sie Weiter aus. Übernehmen Sie den Standardwert für Zielframework.

  6. Klicken Sie auf Erstellen.

  7. Wenn die Projektmappe im Bereich des Projektmappen-Explorers geöffnet wird, klicken Sie mit der rechten Maustaste auf das Projekt CreateEnrollmentGroup, und wählen Sie dann NuGet-Pakete verwalten aus.

  8. Wählen Sie in NuGet Package Manager die Option Durchsuchen aus.

  9. Geben Sie Microsoft.Azure.Devices.Provisioning.Service ein, und wählen Sie den Eintrag aus.

  10. Wählen Sie Installieren aus.

    NuGet Package Manager window

    In diesem Schritt wird das NuGet-Paket mit dem Client-SDK für Azure IoT Provisioning Service heruntergeladen und installiert und ein Verweis auf das Paket und seine Abhängigkeiten hinzugefügt.

  11. Fügen Sie am Anfang von Program.cs nach den anderen using-Anweisungen die folgenden using-Anweisungen hinzu:

    using System.Threading.Tasks;
    using Microsoft.Azure.Devices.Provisioning.Service;
    
  12. Fügen Sie die folgenden Felder zur Program-Klasse hinzu, und nehmen Sie die aufgeführten Änderungen vor.

    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;
    
  13. Ersetzen Sie den Platzhalterwert ProvisioningServiceConnectionString durch die Verbindungszeichenfolge des Bereitstellungsdiensts, die Sie im vorherigen Abschnitt kopiert haben.

  14. Wenn Sie diesen Schnellstart zusammen mit der Schnellstartanleitung unter Schnellstart: Bereitstellen eines simulierten TPM-Geräts verwenden, um ein simuliertes Gerät bereitzustellen, ersetzen Sie den Endorsement Key und die Registrierungs-ID durch die Werte, die Sie sich in diesem Schnellstart notiert haben. Die Geräte-ID können Sie durch den in der Schnellstartanleitung vorgeschlagenen Wert ersetzen, auf einen eigenen Wert festlegen oder den Standardwert in diesem Beispiel verwenden.

  15. Fügen Sie der Program-Klasse die folgende Methode hinzu. Dieser Code erstellt einen individuellen Registrierungseintrag und ruft dann die CreateOrUpdateIndividualEnrollmentAsync-Methode für ProvisioningServiceClient auf, um die individuelle Registrierung zum Bereitstellungsdienst hinzuzufügen.

    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...");
            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 new individualEnrollment...");
            IndividualEnrollment individualEnrollmentResult =
                await provisioningServiceClient.CreateOrUpdateIndividualEnrollmentAsync(individualEnrollment).ConfigureAwait(false);
            Console.WriteLine("\nIndividualEnrollment created with success.");
            Console.WriteLine(individualEnrollmentResult);
            #endregion
    
        }
    }
    
  16. Ersetzen Sie schließlich die Methode Main durch die folgenden Zeilen:

    static async Task Main(string[] args)
    {
        await RunSample();
        Console.WriteLine("\nHit <Enter> to exit ...");
        Console.ReadLine();
    }
    
  17. Erstellen Sie die Projektmappe.

  1. Führen Sie in einem Befehlsfenster in Ihrem Arbeitsordner Folgendes aus:

    npm install azure-iot-provisioning-service
    
  2. Erstellen Sie mit einem Text-Editor in Ihrem Arbeitsordner die Datei create_individual_enrollment.js. Fügen Sie der Datei den folgenden Code hinzu:

    '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. Speichern Sie die Datei .

  1. Navigieren Sie im heruntergeladenen Quellcode zum Beispielordner azure-iot-sdk-java/provisioning/provisioning-samples/service-enrollment-sample . Öffnen Sie die Datei /src/main/java/samples/com/microsoft/azure/sdk/iot/ServiceEnrollmentSample.java.

  2. Ersetzen Sie [Provisioning Connection String] durch die Verbindungszeichenfolge, die Sie unter Abrufen der Verbindungszeichenfolge für Ihren Bereitstellungsdienst kopiert haben.

    private static final String PROVISIONING_CONNECTION_STRING = "[Provisioning Connection String]";
    
    1. Fügen Sie die Details des TPM-Geräts hinzu:
      1. Rufen Sie die Registrierungs-ID und den TPM Endorsement Key für eine TPM-Gerätesimulation ab, indem Sie die Schritte ausführen, die zum Abschnitt Simulate TPM device (Simulieren des TPM-Geräts) führen.

      2. Verwenden Sie die Registrierungs-ID und den Endorsement Key aus der Ausgabe des vorherigen Schritts, um die Elemente [RegistrationId] und [TPM Endorsement Key] in der Beispielcodedatei ServiceEnrollmentSample.java zu ersetzen:

        private static final String REGISTRATION_ID = "[RegistrationId]";
        private static final String TPM_ENDORSEMENT_KEY = "[TPM Endorsement Key]";
        
  3. Fahren Sie mit dem nächsten Schritt fort, um Ihren Bereitstellungsdienst im Beispielcode zu konfigurieren. Falls Sie den Bereitstellungsdienst nicht konfigurieren möchten, sollten Sie die folgenden Anweisungen in der Datei ServiceEnrollmentSample.java auskommentieren oder löschen:

    / / The following parameters are optional. Remove it if you don't need.
    individualEnrollment.setDeviceId(DEVICE_ID);
    individualEnrollment.setIotHubHostName(IOTHUB_HOST_NAME);
    individualEnrollment.setProvisioningStatus(PROVISIONING_STATUS);
    
  4. In diesem Schritt wird gezeigt, wie Sie Ihren Bereitstellungsdienst im Beispielcode konfigurieren.

    1. Öffnen Sie das Azure-Portal.

    2. Wählen Sie im Menü auf der linken Seite oder auf der Portalseite die Option Alle Ressourcen aus.

    3. Wählen Sie Ihre Device Provisioning Service-Instanz aus.

    4. Kopieren Sie im Bereich Übersicht den Hostnamen des Dienstendpunkts. Ersetzen Sie im Quellcodebeispiel [Host name] durch den kopierten Hostnamen.

    private static final String IOTHUB_HOST_NAME = "[Host name].azure-devices.net";
    
  5. Sehen Sie sich den Beispielcode näher an. Er bewirkt, dass eine individuelle Registrierung eines TPM-Geräts erstellt, aktualisiert, abgefragt und gelöscht wird. Um zu überprüfen, ob die Registrierung im Portal erfolgreich war, können Sie die folgenden Codezeilen am Ende der Datei ServiceEnrollmentSample.java vorübergehend auskommentieren:

    // *********************************** Delete info of individualEnrollment ************************************
    System.out.println("\nDelete the individualEnrollment...");
    provisioningServiceClient.deleteIndividualEnrollment(REGISTRATION_ID);
    
  6. Speichern Sie die Datei ServiceEnrollmentSample.java.

Ausführen des Beispiels für die individuelle Registrierung

  1. Führen Sie das Beispiel in Visual Studio aus, um die Registrierung zu erstellen. Ein Befehlsfenster wird angezeigt, in dem Bestätigungsmeldungen angezeigt werden.

  2. Bei erfolgreicher Erstellung werden im Befehlsfenster die Eigenschaften der neuen Registrierung angezeigt.

Zum Ausführen des Beispiels benötigen Sie die Verbindungszeichenfolge für Ihren Bereitstellungsdienst, die Sie im vorherigen Abschnitt kopiert haben, sowie den Endorsement Key für das Gerät. Falls Sie die Schritte der Schnellstartanleitung unter Schnellstart: Bereitstellen eines simulierten TPM-Geräts befolgt haben, um ein simuliertes TPM-Gerät zu erstellen, können Sie den für dieses Gerät erstellten Schlüssel verwenden. Andernfalls können Sie zum Erstellen eines Beispiels für die individuelle Registrierung den folgenden Endorsement Key nutzen, der über das Node.js-Dienst-SDK bereitgestellt wird:

AToAAQALAAMAsgAgg3GXZ0SEs/gakMyNRqXXJP1S124GUgtk8qHaGzMUaaoABgCAAEMAEAgAAAAAAAEAxsj2gUScTk1UjuioeTlfGYZrrimExB+bScH75adUMRIi2UOMxG1kw4y+9RW/IVoMl4e620VxZad0ARX2gUqVjYO7KPVt3dyKhZS3dkcvfBisBhP1XH9B33VqHG9SHnbnQXdBUaCgKAfxome8UmBKfe+naTsE5fkvjb/do3/dD6l4sGBwFCnKRdln4XpM03zLpoHFao8zOwt8l/uP3qUIxmCYv9A7m69Ms+5/pCkTu/rK4mRDsfhZ0QLfbzVI6zQFOKF/rwsfBtFeWlWtcuJMKlXdD8TXWElTzgh7JS4qhFzreL0c1mI0GCj+Aws0usZh7dLIVPnlgZcBhgy1SSDQMQ==
  1. Führen Sie den folgenden Befehl aus (einschließlich der Anführungszeichen der Befehlsargumente), um eine individuelle Registrierung für Ihr TPM-Gerät zu erstellen:

    node create_individual_enrollment.js "<the connection string for your provisioning service>" "<endorsement key>"
    
  2. Bei erfolgreicher Erstellung werden im Befehlsfenster die Eigenschaften der neuen Registrierung angezeigt.

  1. Öffnen Sie ein Befehlsfenster im Administratormodus, und navigieren Sie zum Ordner azure-iot-sdk-java/provisioning/provisioning-samples/service-enrollment-group-sample.

  2. Führen Sie den folgenden Befehl an der Eingabeaufforderung aus:

    mvn install -DskipTests
    

    Mit diesem Befehl wird das Maven-Paket com.microsoft.azure.sdk.iot.provisioning.service auf Ihren Computer heruntergeladen. Das Paket enthält die Binärdateien für das Java-Dienst-SDK, das mit dem Code erstellt werden soll. Wenn Sie im vorherigen Abschnitt das Tool X.509-Zertifikatgenerator ausgeführt haben, wurde dieses Paket bereits auf Ihren Computer heruntergeladen.

  3. Führen Sie das Skript an der Eingabeaufforderung aus:

    cd target
    java -jar ./service-enrollment-group-sample-{version}-with-deps.jar
    
  4. Bei erfolgreicher Erstellung werden im Befehlsfenster die Eigenschaften der neuen Registrierung angezeigt.

So überprüfen Sie, ob die Registrierungsgruppe erstellt wurde

  1. Wählen Sie im Azure-Portal Ihre Device Provisioning Service-Instanz aus.

  2. Wählen Sie im Menü Einstellungen die Option Registrierungen verwalten aus.

  3. Wählen Sie Individuelle Registrierungen aus. Daraufhin sollte ein neuer Registrierungseintrag mit der im Beispiel verwendeten Registrierungs-ID angezeigt werden.

Verify enrollment for C# individual device in the portal.

Verify enrollment for Node.js individual device in the portal.

Verify enrollment for Java individual device in the portal.

Bereinigen von Ressourcen

Wenn Sie die Tutorials zu Azure IoT Hub Device Provisioning Service erkunden möchten, sollten Sie die in dieser Schnellstartanleitung erstellten Ressourcen nicht bereinigen. Führen Sie andernfalls die folgenden Schritte aus, um alle Ressourcen zu löschen, die im Rahmen dieser Schnellstartanleitung erstellt wurden.

  1. Schließen Sie das Beispielausgabefenster auf Ihrem Computer.

  2. Wählen Sie im Azure-Portal im linken Menü die Option Alle Ressourcen aus.

  3. Wählen Sie Ihre Device Provisioning Service-Instanz aus.

  4. Wählen Sie im Menü Einstellungen die Option Registrierungen verwalten aus.

  5. Wählen Sie die Registerkarte Individuelle Registrierungen aus.

  6. Aktivieren Sie das Kontrollkästchen neben der REGISTRIERUNGS-ID des Geräts, das Sie in dieser Schnellstartanleitung registriert haben.

  7. Wählen Sie oben auf der Seite Löschen aus.

  8. Wählen Sie im Azure-Portal in Ihrer Device Provisioning Service-Instanz die Option Zertifikate aus.

  9. Wählen Sie das Zertifikat aus, das Sie für diese Schnellstartanleitung hochgeladen haben.

  10. Wählen Sie am oberen Rand von Zertifikatdetails die Option Löschen aus.

  11. Falls Sie die Schritte unter Schnellstart: Bereitstellen eines simulierten TPM-Geräts ausgeführt haben, um ein simuliertes TPM-Gerät zu erstellen, gehen Sie wie folgt vor:

    1. Schließen Sie das TPM-Simulatorfenster und das Beispielausgabefenster für das simulierte Gerät.

    2. Navigieren Sie im Azure-Portal zu der IoT Hub-Instanz, in der Ihr Gerät bereitgestellt wurde.

    3. Wählen Sie im Menü unter Explorer die Option IoT-Geräte aus.

    4. Aktivieren Sie das Kontrollkästchen neben der GERÄTE-ID des Geräts, das Sie in dieser Schnellstartanleitung registriert haben.

    5. Wählen Sie am oberen Rand des Bereichs die Option Löschen aus.

Nächste Schritte

In dieser Schnellstartanleitung haben Sie programmgesteuert einen individuellen Registrierungseintrag für ein TPM-Gerät erstellt. Optional haben Sie auf Ihrem Computer ein simuliertes TPM-Gerät erstellt und es mithilfe von Azure IoT Hub Device Provisioning Service für Ihren IoT-Hub bereitgestellt. Ausführlichere Informationen zur Gerätebereitstellung finden Sie im Tutorial zur Einrichtung des Device Provisioning-Diensts über das Azure-Portal.