Schnellstart: Bereitstellen eines simulierten Geräts mit X.509-Zertifikat

In dieser Schnellstartanleitung erstellen Sie ein simuliertes Gerät auf Ihrem Windows-Computer. Das simulierte Gerät wird für die Verwendung des Mechanismus des X.509-Zertifikatnachweises für die Authentifizierung konfiguriert. Nachdem Sie Ihr Gerät konfiguriert haben, werden Sie es mithilfe des Azure IoT Hub Device Provisioning Service für Ihren IoT-Hub bereitstellen.

Wenn Sie mit dem Prozess der Bereitstellung noch nicht vertraut sind, sollten Sie zunächst die Übersicht zur Bereitstellung lesen. Vergewissern Sie sich außerdem, dass Sie die Schritte unter Einrichten des IoT Hub Device Provisioning-Diensts über das Azure-Portal ausgeführt haben, bevor Sie fortfahren.

In dieser Schnellstartanleitung wird eine Projektmappe für eine Windows-Arbeitsstation gezeigt. Sie können die Schritte aber auch unter Linux ausführen. Ein Beispiel für Linux finden Sie unter Bereitstellen für Mehrinstanzenfähigkeit.

Voraussetzungen

Die folgenden Voraussetzungen gelten für eine Windows-Entwicklungsumgebung. Informationen zu Linux oder macOS finden Sie in der SDK-Dokumentation im entsprechenden Abschnitt unter Vorbereiten Ihrer Entwicklungsumgebung.

  • Installieren Sie Visual Studio 2022 mit der aktivierten Workload Desktopentwicklung mit C++. Visual Studio 2015, Visual Studio 2017 und Visual Studio 2019 werden ebenfalls unterstützt. Informationen zu Linux oder macOS finden Sie in der SDK-Dokumentation im entsprechenden Abschnitt unter Vorbereiten Ihrer Entwicklungsumgebung.

  • Installieren Sie das neueste CMake-Buildsystem. Überprüfen Sie unbedingt die Option, mit der die ausführbare Datei „CMake“ Ihrem Pfad hinzugefügt wird.

    Wichtig

    Vergewissern Sie sich vor Beginn der Installation von CMake, dass die erforderlichen Visual Studio-Komponenten (Visual Studio und die Workload „Desktopentwicklung mit C++“) auf dem Computer installiert sind. Sobald die Voraussetzungen erfüllt sind und der Download überprüft wurde, installieren Sie das CMake-Buildsystem. Beachten Sie auch, dass ältere Versionen des CMake-Buildsystems die in diesem Artikel verwendete Projektmappendatei nicht generieren können. Stellen Sie sicher, dass Sie die neueste Version von CMake verwenden.

Die folgenden Voraussetzungen gelten für eine Windows-Entwicklungsumgebung. Informationen zu Linux oder macOS finden Sie in der SDK-Dokumentation im entsprechenden Abschnitt unter Vorbereiten Ihrer Entwicklungsumgebung.

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

    dotnet --info
    

Die folgenden Voraussetzungen gelten für eine Windows-Entwicklungsumgebung. Informationen zu Linux oder macOS finden Sie in der SDK-Dokumentation im entsprechenden Abschnitt unter Vorbereiten Ihrer Entwicklungsumgebung.

Die folgenden Voraussetzungen gelten für eine Windows-Entwicklungsumgebung.

Die folgenden Voraussetzungen gelten für eine Windows-Entwicklungsumgebung. Informationen zu Linux oder macOS finden Sie in der SDK-Dokumentation im entsprechenden Abschnitt unter Vorbereiten Ihrer Entwicklungsumgebung.

  • Installieren Sie die aktuelle Version von Git. Stellen Sie sicher, dass Git den Umgebungsvariablen hinzugefügt wurde, auf die das Befehlsfenster Zugriff hat. Unter den Git-Clienttools von Software Freedom Conservancy finden Sie die neueste Version der zu installierenden git-Tools. Hierzu zählt auch die Befehlszeilen-App Git Bash, über die Sie mit Ihrem lokalen Git-Repository interagieren können.

  • Sorgen Sie dafür, dass OpenSSL auf Ihrem Computer installiert wird. Unter Windows enthält Ihre Git-Installation eine Installation von OpenSSL. Sie können über die Git Bash-Eingabeaufforderung auf OpenSSL zugreifen. Zur Überprüfung, ob OpenSSL installiert ist, öffnen Sie eine Git Bash-Eingabeaufforderung, und geben Sie openssl version ein.

    Hinweis

    Außer wenn Sie mit OpenSSL vertraut sind und es auf Ihrem Windows-Computer bereits installiert haben, empfehlen wir die Verwendung von OpenSSL über die Git Bash-Eingabeaufforderung. Alternativ können Sie den Quellcode herunterladen und OpenSSL erstellen. Weitere Informationen dazu finden Sie auf der Seite OpenSSL-Downloads. Oder Sie können vordefiniertes OpenSSL von einem Drittanbieter herunterladen. Weitere Informationen dazu finden Sie im OpenSSL-Wiki. Microsoft garantiert nicht die Gültigkeit von Paketen, die von Drittanbietern heruntergeladen wurden. Wenn Sie OpenSSL erstellen oder herunterladen möchten, sorgen Sie dafür, dass auf die OpenSSL-Binärdatei in Ihrem Pfad zugegriffen werden kann und dass die Umgebungsvariable OPENSSL_CNF auf den Pfad Ihrer Datei openssl.cnf festgelegt wird.

  • Öffnen Sie sowohl eine Windows-Eingabeaufforderung als auch eine Git Bash-Eingabeaufforderung.

    Bei den Schritten in diesem Schnellstart wird davon ausgegangen, dass Sie einen Windows-Computer und die OpenSSL-Installation verwenden, die als Teil von Git installiert wurde. Sie werden die Git Bash-Eingabeaufforderung für die Ausgabe von OpenSSL-Befehlen und die Windows-Eingabeaufforderung für alles andere verwenden. Wenn Sie Linux verwenden, können Sie alle Befehle aus einer Bash-Shell ausgeben.

Vorbereiten Ihrer Entwicklungsumgebung

In diesem Abschnitt bereiten Sie eine Entwicklungsumgebung vor, die zum Erstellen des Azure IoT C SDK verwendet wird. Mit dem Beispielcode wird versucht, das Gerät während der Startsequenz des Geräts bereitzustellen.

  1. Öffnen Sie einen Webbrowser, und wechseln Sie zur Releaseseite für das Azure IoT C SDK.

  2. Wählen Sie oben auf der Seite die Registerkarte Tags aus.

  3. Kopieren Sie den Tagnamen für das aktuelle Release des Azure IoT C SDK.

  4. Führen Sie in Ihrer Windows-Eingabeaufforderung die folgenden Befehle zum Klonen des aktuellen Releases des GitHub-Repositorys Azure IoT C-SDK aus. (Ersetzen Sie <release-tag> durch das Tag, das Sie im vorherigen Schritt kopiert haben.)

    git clone -b <release-tag> https://github.com/Azure/azure-iot-sdk-c.git
    cd azure-iot-sdk-c
    git submodule update --init
    

    Dieser Vorgang kann mehrere Minuten dauern.

  5. Wenn der Vorgang abgeschlossen ist, führen Sie die folgenden Befehle aus dem Verzeichnis azure-iot-sdk-c aus:

    mkdir cmake
    cd cmake
    
  6. Das Codebeispiel verwendet ein X.509-Zertifikat für den Nachweis mittels X.509-Authentifizierung. Erstellen Sie mithilfe des folgenden Befehls eine spezifische SDK-Version für Ihre Entwicklungsplattform, die den Gerätebereitstellungsclient enthält. Im cmake-Verzeichnis wird eine Visual Studio-Projektmappe für das simulierte Gerät generiert.

    Wenn Sie im folgenden Befehl den verwendeten Pfad mit -Dhsm_custom_lib angeben, müssen Sie unbedingt den absoluten Pfad zur Bibliothek in dem zuvor erstellten Verzeichnis cmake verwenden. Beim unten gezeigten Pfad wird davon ausgegangen, dass Sie das C-SDK im Stammverzeichnis des Laufwerks „C:“ geklont haben. Wenn Sie ein anderes Verzeichnis verwendet haben, passen Sie den Pfad entsprechend an.

    cmake -Duse_prov_client:BOOL=ON -Dhsm_custom_lib=c:/azure-iot-sdk-c/cmake/provisioning_client/samples/custom_hsm_example/Debug/custom_hsm_example.lib ..
    

    Tipp

    Falls cmake Ihren C++-Compiler nicht findet, treten beim Ausführen des obigen Befehls unter Umständen Buildfehler auf. Führen Sie den Befehl in diesem Fall an der Visual Studio-Eingabeaufforderung aus.

  7. Nach erfolgreicher Erstellung ähneln die letzten Ausgabezeilen der folgenden Ausgabe:

    cmake -Duse_prov_client:BOOL=ON -Dhsm_custom_lib=c:/azure-iot-sdk-c/cmake/provisioning_client/samples/custom_hsm_example/Debug/custom_hsm_example.lib ..
    -- Building for: Visual Studio 17 2022
    -- Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.22000.
    -- The C compiler identification is MSVC 19.32.31329.0
    -- The CXX compiler identification is MSVC 19.32.31329.0
    
    ...
    
    -- Configuring done
    -- Generating done
    -- Build files have been written to: C:/azure-iot-sdk-c/cmake
    
  1. Klonen Sie in Ihrer Windows-Eingabeaufforderung das GitHub-Repository mit den Azure IoT-Beispielen für C# mithilfe des folgenden Befehls:

    git clone https://github.com/Azure-Samples/azure-iot-samples-csharp.git
    
  1. Klonen Sie in Ihrer Windows-Eingabeaufforderung das GitHub-Repository mit den Azure IoT-Beispielen für Node.js mithilfe des folgenden Befehls:

    git clone https://github.com/Azure/azure-iot-sdk-node.git
    
  1. Klonen Sie in Ihrer Windows-Eingabeaufforderung das GitHub-Repository mit den Azure IoT-Beispielen für Python mithilfe des folgenden Befehls:

    git clone https://github.com/Azure/azure-iot-sdk-python.git --recursive
    
  1. Klonen Sie in Ihrer Windows-Eingabeaufforderung das GitHub-Repository mit den Azure IoT-Beispielen für Java mithilfe des folgenden Befehls:

    git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
    
  2. Navigieren Sie zum Stammverzeichnis azure-iot-sdk-java, und erstellen Sie das Projekt, um alle erforderlichen Pakete herunterzuladen.

    cd azure-iot-sdk-java
    mvn install -DskipTests=true
    

Erstellen eines selbstsignierten X.509-Gerätezertifikats

In diesem Abschnitt verwenden Sie OpenSSL, um ein selbstsigniertes X.509-Zertifikat und einen privaten Schlüssel zu erstellen. Dieses Zertifikat wird in Ihre Instanz des Bereitstellungsdiensts hochgeladen und vom Dienst überprüft.

Achtung

Verwenden Sie mit OpenSSL erstellte Zertifikate in diesem Schnellstart nur für Entwicklungstests. Verwenden Sie diese Zertifikate nicht in der Produktionsumgebung. Diese Zertifikate laufen nach 30 Tagen ab und enthalten möglicherweise hartcodierte Kennwörter, z. B. 1234. Informationen zum Abrufen von Zertifikaten, die für den Einsatz in der Produktion geeignet sind, finden Sie in der Azure IoT Hub-Dokumentation unter Abrufen eines X.509-Zertifizierungsstellenzertifikats.

Führen Sie die Schritte in diesem Abschnitt in Ihrer Git Bash-Eingabeaufforderung aus.

  1. Navigieren Sie in Ihrer Git Bash-Eingabeaufforderung zu dem Verzeichnis, in dem Sie Ihre Zertifikate erstellen möchten.

  2. Führen Sie den folgenden Befehl aus:

    winpty openssl req -outform PEM -x509 -sha256 -newkey rsa:4096 -keyout device-key.pem -out device-cert.pem -days 30 -extensions usr_cert -addext extendedKeyUsage=clientAuth -subj "//CN=my-x509-device"
    

    Wichtig

    Der zusätzliche Schrägstrich für den Antragstellernamen (//CN=my-x509-device) ist nur erforderlich, um die Zeichenfolge für Git auf Windows-Plattformen mit einem Escapezeichen zu versehen.

  3. Wenn die Aufforderung PEM-Passphrase eingeben: angezeigt wird, verwenden Sie die Passphrase 1234.

  4. Wenn Sie zum Bestätigen der PEM-Passphrase aufgefordert werden, geben Sie die Passphrase 1234 erneut ein.

    Eine Datei für das öffentliche Schlüsselzertifikat (device-cert.pem) und eine Datei für den privaten Schlüssel (device-key.pem) sollten jetzt in dem Verzeichnis generiert werden, in dem Sie den Befehl openssl ausgeführt haben.

    Für die Zertifikatdatei ist der CN des Antragstellers auf my-x509-device festgelegt. Bei X.509-basierten Registrierungen wird die Registrierungs-ID auf den allgemeinen Namen festgelegt. Bei der Registrierungs-ID handelt es sich um eine Zeichenfolge (bis zu 128 Zeichen lang) alphanumerischer Zeichen ohne Beachtung der Groß-/Kleinschreibung plus diese Sonderzeichen: '-', '.', '_', ':'. Das letzte Zeichen muss alphanumerisch oder ein Bindestrich ('-') sein. Der allgemeine Name muss diesem Format entsprechen.

  5. Die Zertifikatdatei ist Base64-codiert. Wenn Sie den allgemeinen Namen (Common Name, CN) des Antragstellers und andere Eigenschaften der Zertifikatdatei anzeigen möchten, geben Sie den folgenden Befehl ein:

    winpty openssl x509 -in device-cert.pem -text -noout
    
    Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            77:3e:1d:e4:7e:c8:40:14:08:c6:09:75:50:9c:1a:35:6e:19:52:e2
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN = my-x509-device
        Validity
            Not Before: May  5 21:41:42 2022 GMT
            Not After : Jun  4 21:41:42 2022 GMT
        Subject: CN = my-x509-device
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (4096 bit)
                Modulus:
                    00:d2:94:37:d6:1b:f7:43:b4:21:c6:08:1a:d6:d7:
                    e6:40:44:4e:4d:24:41:6c:3e:8c:b2:2c:b0:23:29:
                    ...
                    23:6e:58:76:45:18:03:dc:2e:9d:3f:ac:a3:5c:1f:
                    9f:66:b0:05:d5:1c:fe:69:de:a9:09:13:28:c6:85:
                    0e:cd:53
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                63:C0:B5:93:BF:29:F8:57:F8:F9:26:44:70:6F:9B:A4:C7:E3:75:18
            X509v3 Authority Key Identifier:
                keyid:63:C0:B5:93:BF:29:F8:57:F8:F9:26:44:70:6F:9B:A4:C7:E3:75:18
    
            X509v3 Extended Key Usage:
                TLS Web Client Authentication
    Signature Algorithm: sha256WithRSAEncryption
         82:8a:98:f8:47:00:85:be:21:15:64:b9:22:b0:13:cc:9e:9a:
         ed:f5:93:b9:4b:57:0f:79:85:9d:89:47:69:95:65:5e:b3:b1:
         ...
         cc:b2:20:9a:b7:f2:5e:6b:81:a1:04:93:e9:2b:92:62:e0:1c:
         ac:d2:49:b9:36:d2:b0:21
    
  1. Der Beispielcode erfordert einen privaten Schlüssel, der nicht verschlüsselt ist. Führen Sie den folgenden Befehl aus, um einen unverschlüsselten privaten Schlüssel zu erstellen:

    winpty openssl rsa -in device-key.pem -out unencrypted-device-key.pem
    
  2. Wenn die Aufforderung Enter pass phrase for device-key.pem (Passphrase für device-key.pem eingeben) angezeigt wird, verwenden Sie dieselbe Passphrase wie zuvor, 1234.

Lassen Sie die Git Bash-Eingabeaufforderung geöffnet. Sie benötigen sie noch im weiteren Verlauf dieses Schnellstarts.

Der C#-Beispielcode ist für die Verwendung von X.509-Zertifikaten konzipiert, die in einer kennwortgeschützten Datei im PKCS12-Format (certificate.pfx) gespeichert sind. Sie benötigen noch die Datei für das öffentliche Schlüsselzertifikat im PEM-Format (device-cert.pem), die Sie gerade erstellt haben, um im weiteren Verlauf dieses Schnellstarts einen einzelnen Registrierungseintrag zu erstellen.

  1. Geben Sie zum Generieren der von dem Beispiel erwarteten Datei im PKCS12-Format den folgenden Befehl ein:

    winpty openssl pkcs12 -inkey device-key.pem -in device-cert.pem -export -out certificate.pfx
    
  2. Wenn die Aufforderung Enter pass phrase for device-key.pem (Passphrase für device-key.pem eingeben) angezeigt wird, verwenden Sie dieselbe Passphrase wie zuvor, 1234.

  3. Wenn die Aufforderung Enter Export Password: (Exportkennwort eingeben) angezeigt wird, verwenden Sie das Kennwort 1234.

  4. Wenn die Aufforderung Verifying – Enter Export Password: (Überprüfen – Kennwort eingeben) angezeigt wird, verwenden Sie erneut das Kennwort 1234.

    Jetzt sollte eine Zertifikatdatei im PKCS12-Format (certificate.pfx) in dem Verzeichnis generiert werden, in dem Sie den Befehl openssl ausgeführt haben.

  5. Kopieren Sie die Zertifikatdatei im PKCS12-Format in das Projektverzeichnis für das Beispiel zur X.509-Gerätebereitstellung. Der angegebene Pfad ist relativ zu dem Speicherort, in den Sie das Beispiel-Repository heruntergeladen haben.

    cp certificate.pfx ./azure-iot-samples-csharp/provisioning/Samples/device/X509Sample
    

Sie benötigen die Git Bash-Eingabeaufforderung für den Rest dieses Schnellstarts nicht. Möglicherweise möchten Sie sie aber geöffnet lassen, damit Sie Ihr Zertifikat überprüfen können, wenn in späteren Schritten Probleme auftreten.

  1. Kopieren Sie das Gerätezertifikat und den privaten Schlüssel in das Projektverzeichnis für das Beispiel zur X.509-Gerätebereitstellung. Der angegebene Pfad ist relativ zu dem Speicherort, in den Sie das SDK heruntergeladen haben.

    cp device-cert.pem ./azure-iot-sdk-node/provisioning/device/samples
    cp device-key.pem ./azure-iot-sdk-node/provisioning/device/samples
    

Sie benötigen die Git Bash-Eingabeaufforderung für den Rest dieses Schnellstarts nicht. Möglicherweise möchten Sie sie aber geöffnet lassen, damit Sie Ihr Zertifikat überprüfen können, wenn in späteren Schritten Probleme auftreten.

  1. Kopieren Sie das Gerätezertifikat und den privaten Schlüssel in das Projektverzeichnis für das Beispiel zur X.509-Gerätebereitstellung. Der angegebene Pfad ist relativ zu dem Speicherort, in den Sie das SDK heruntergeladen haben.

    cp device-cert.pem ./azure-iot-sdk-python/azure-iot-device/samples/async-hub-scenarios
    cp device-key.pem ./azure-iot-sdk-python/azure-iot-device/samples/async-hub-scenarios
    

Sie benötigen die Git Bash-Eingabeaufforderung für den Rest dieses Schnellstarts nicht. Möglicherweise möchten Sie sie aber geöffnet lassen, damit Sie Ihr Zertifikat überprüfen können, wenn in späteren Schritten Probleme auftreten.

  1. Der Java-Beispielcode erfordert einen privaten Schlüssel, der nicht verschlüsselt ist. Führen Sie den folgenden Befehl aus, um einen unverschlüsselten privaten Schlüssel zu erstellen:

    winpty openssl pkey -in device-key.pem -out unencrypted-device-key.pem
    
  2. Wenn die Aufforderung Enter pass phrase for device-key.pem (Passphrase für device-key.pem eingeben) angezeigt wird, verwenden Sie dieselbe Passphrase wie zuvor, 1234.

Lassen Sie die Git Bash-Eingabeaufforderung geöffnet. Sie benötigen sie noch im weiteren Verlauf dieses Schnellstarts.

Erstellen einer Geräteregistrierung

In Azure IoT Device Provisioning Service werden zwei Registrierungsarten unterstützt:

In diesem Artikel wird veranschaulicht, wie eine individuelle Registrierung für ein einzelnes Gerät, das mit einem IoT-Hub bereitgestellt werden soll, durchgeführt wird.

  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 Registrierungen verwalten aus.

  5. Wählen Sie oben auf der Seite die Option + Individuelle Registrierung hinzufügen aus.

  6. Geben Sie auf der Seite Registrierung hinzufügen die folgenden Informationen ein.

    • Mechanismus: Wählen Sie X.509 als Mechanismus für den Nachweis der Identität.
    • Primäres Zertifikat (PEM- oder CER-Datei): Wählen Sie Datei auswählen, navigieren Sie zu der im vorhergehenden Abschnitt erstellten Zertifikatdatei, device-cert.pem, und wählen Sie sie aus.
    • Lassen Sie das Feld IoT Hub-Geräte-ID leer. Bei der Bereitstellung Ihres Geräts wird die Geräte-ID auf den allgemeinen Namen (Common Name, CN) aus dem X.509-Zertifikat, my-x509-device, festgelegt. Dieser allgemeine Name wird auch für die Registrierungs-ID des Eintrags für die individuelle Registrierung verwendet.
    • Optional können Sie die folgenden Informationen angeben:
      • Wählen Sie einen IoT Hub aus, der mit Ihrem Bereitstellungsdienst verknüpft ist.
      • Aktualisieren Sie Initial device twin state (Anfänglicher Gerätezwillingsstatus) mit der gewünschten Anfangskonfiguration für das Gerät.

    Screenshot that shows adding an individual enrollment with X.509 attestation to D P S in Azure portal.

  7. Wählen Sie Speichern aus. Sie werden zu Registrierungen verwalten zurückgeleitet.

  8. Wählen Sie Individuelle Registrierungen aus. Ihr X.509-Registrierungseintrag, my-x509-device, sollte in der Liste angezeigt werden.

Vorbereiten und Ausführen des Gerätebereitstellungscodes

In diesem Abschnitt aktualisieren Sie den Beispielcode, um die Startsequenz des Geräts an Ihre Device Provisioning Service-Instanz zu senden. Diese Startsequenz bewirkt, dass das Gerät erkannt und einem IoT-Hub zugewiesen wird, der mit der DPS-Instanz verknüpft ist.

In diesem Abschnitt verwenden Sie Ihre Git Bash-Eingabeaufforderung und die Visual Studio-IDE.

Konfigurieren des Codes für die Bereitstellung des Geräts

In diesem Abschnitt aktualisieren Sie den Beispielcode mit den Informationen zu Ihrer Device Provisioning Service-Instanz.

  1. Wählen Sie im Azure-Portal die Registerkarte Übersicht für Ihre Device Provisioning Service-Instanz.

  2. Kopieren Sie den Wert von ID-Bereich.

    Screenshot of the I D scope on Azure portal.

  3. Starten Sie Visual Studio, und öffnen Sie die neue Projektmappendatei, die im Verzeichnis cmake erstellt wurde, das Sie im Stammverzeichnis des Git-Repositorys „azure-iot-sdk-c“ erstellt haben. Die Projektmappendatei hat den Namen azure_iot_sdks.sln.

  4. Navigieren Sie im Projektmappen-Explorer von Visual Studio zu Provision_Samples > prov_dev_client_sample > Source Files, und öffnen Sie prov_dev_client_sample.c.

  5. Suchen Sie die Konstante id_scope, und ersetzen Sie den Wert durch Ihren Wert ID-Bereich, den Sie in Schritt 2 kopiert haben.

    static const char* id_scope = "0ne00000A0A";
    
  6. Suchen Sie die Definition für die Funktion main() in der gleichen Datei. Stellen Sie sicher, dass die Variable hsm_type wie unten dargestellt auf SECURE_DEVICE_TYPE_X509 festgelegt ist.

    SECURE_DEVICE_TYPE hsm_type;
    //hsm_type = SECURE_DEVICE_TYPE_TPM;
    hsm_type = SECURE_DEVICE_TYPE_X509;
    //hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;
    
  7. Speichern Sie die Änderungen.

  8. Klicken Sie mit der rechten Maustaste auf das Projekt prov_dev_client_sample, und wählen Sie Als Startprojekt festlegen aus.

Konfigurieren des Stubcodes für das benutzerdefinierte HSM

Die Details der Interaktion mit sicherem hardwarebasiertem Speicher in der Praxis variieren je nach Hardware. Daher werden das Zertifikat und der private Schlüssel, die von dem simulierten Gerät in diesem Schnellstart verwendet werden, im Stubcode für das benutzerdefinierte Hardwaresicherheitsmodul (HSM) hart codiert.

So aktualisieren Sie den Stubcode für das benutzerdefinierte HSM zum Simulieren der Identität des Geräts mit der ID my-x509-device:

  1. Navigieren Sie im Projektmappen-Explorer von Visual Studio zu Provision_Samples> custom_hsm_example > Source Files, und öffnen Sie custom_hsm_example.c.

  2. Aktualisieren Sie den Zeichenfolgenwert der Zeichenfolgenkonstante COMMON_NAME mit dem allgemeinen Namen, den Sie beim Generieren des Gerätezertifikats my-x509-device verwendet haben.

    static const char* const COMMON_NAME = "my-x509-device";
    
  3. Aktualisieren Sie den Zeichenfolgenwert der konstanten Zeichenfolge CERTIFICATE mithilfe des zuvor generierten Gerätezertifikats, device-cert.pem.

    Die Syntax des Zertifikattexts im Beispiel muss dem unten angegebenen Muster (ohne zusätzliche Leerstellen oder eine Analyse durch Visual Studio) entsprechen.

    static const char* const CERTIFICATE = "-----BEGIN CERTIFICATE-----\n"
    "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n"
        ...
    "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n"
    "-----END CERTIFICATE-----";        
    

    Das manuelle Aktualisieren dieses Zeichenfolgenwerts kann fehleranfällig sein. Zum Generieren der richtigen Syntax können Sie den folgenden Befehl kopieren und in Ihre Git Bash-Eingabeaufforderung einfügen. Drücken Sie dann die EINGABETASTE. Dieser Befehl generiert die Syntax für den Wert der Zeichenfolgenkonstante CERTIFICATE und schreibt sie in die Ausgabe.

    sed -e 's/^/"/;$ !s/$/""\\n"/;$ s/$/"/' device-cert.pem
    

    Kopieren Sie den ausgegebenen Zertifikattext für den konstanten Wert, und fügen Sie ihn ein.

  4. Aktualisieren Sie den Zeichenfolgenwert der Konstante PRIVATE_KEY mit dem unverschlüsselten privaten Schlüssel für Ihr Gerätezertifikat, unencrypted-device-key.pem.

    Die Syntax des Texts zum privaten Schlüssel muss dem unten angegebenen Muster ohne zusätzliche Leerstellen oder eine Analyse durch Visual Studio entsprechen.

    static const char* const PRIVATE_KEY = "-----BEGIN RSA PRIVATE KEY-----\n"
    "MIIJJwIBAAKCAgEAtjvKQjIhp0EE1PoADL1rfF/W6v4vlAzOSifKSQsaPeebqg8U\n"
        ...
    "X7fi9OZ26QpnkS5QjjPTYI/wwn0J9YAwNfKSlNeXTJDfJ+KpjXBcvaLxeBQbQhij\n"
    "-----END RSA PRIVATE KEY-----";
    

    Das manuelle Aktualisieren dieses Zeichenfolgenwerts kann fehleranfällig sein. Zum Generieren der richtigen Syntax können Sie den folgenden Befehl kopieren und in Ihre Git Bash-Eingabeaufforderung einfügen. Drücken Sie dann die EINGABETASTE. Dieser Befehl generiert die Syntax für den Wert der Zeichenfolgenkonstante PRIVATE_KEY und schreibt sie in die Ausgabe.

    sed -e 's/^/"/;$ !s/$/""\\n"/;$ s/$/"/' unencrypted-device-key.pem
    

    Kopieren Sie den ausgegebenen Text zum privaten Schlüssel für den konstanten Wert, und fügen Sie ihn ein.

  5. Speichern Sie die Änderungen.

  6. Klicken Sie mit der rechten Maustaste auf das Projekt custom_hsm_-_example, und wählen Sie Erstellen aus.

    Wichtig

    Sie müssen das Projekt custom_hsm_example erstellen, bevor Sie die restliche Projektmappe im nächsten Abschnitt erstellen.

Ausführen des Beispiels

  1. Wählen Sie im Visual Studio-Menü die Option Debuggen>Starten ohne Debugging aus, um die Projektmappe auszuführen. Wenn Sie zum erneuten Erstellen des Projekts aufgefordert werden, wählen Sie Ja aus, um es vor der Ausführung neu zu erstellen.

    Die folgende Ausgabe ist ein Beispiel dafür, wie das simulierte Gerät my-x509-device erfolgreich gestartet wird und eine Verbindung mit dem Bereitstellungsdienst herstellt. Das Gerät wird einem IoT-Hub zugewiesen und registriert:

    Provisioning API Version: 1.8.0
    
    Registering Device
    
    Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED
    Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING
    
    Registration Information received from service: contoso-iot-hub-2.azure-devices.net, deviceId: my-x509-device
    Press enter key to exit:
    

In diesem Abschnitt verwenden Sie Ihre Windows-Eingabeaufforderung.

  1. Wählen Sie im Azure-Portal die Registerkarte Übersicht für Ihre Device Provisioning Service-Instanz.

  2. Kopieren Sie den Wert von ID-Bereich.

    Screenshot of the I D scope on Azure portal.

  3. Wechseln Sie in Ihrer Windows-Eingabeaufforderung zum Verzeichnis „X509Sample“. Es befindet sich im Verzeichnis .\azure-iot-samples-csharp\provisioning\Samples\device\X509Sample unter dem Verzeichnis, in dem Sie die Beispiele auf Ihrem Computer geklont haben.

  4. Geben Sie den folgenden Befehl ein, um das Beispiel für die X.509-Gerätebereitstellung zu erstellen und auszuführen (ersetzen Sie den Wert <IDScope> durch den ID-Bereich, den Sie im vorhergehenden Abschnitt kopiert haben). Die Zertifikatdatei wird standardmäßig unter ./certificate.pfx erstellt, und Sie werden zur Eingabe des PFX-Kennworts aufgefordert.

    dotnet run -- -s <IDScope>
    

    Wenn Sie das Zertifikat und Kennwort als Parameter übergeben möchten, können Sie das folgende Format verwenden.

    Hinweis

    Zusätzliche Parameter können beim Ausführen der Anwendung übergeben werden, um den TransportType (-t) und den GlobalDeviceEndpoint (-g) zu ändern.

    dotnet run -- -s 0ne00000A0A -c certificate.pfx -p 1234
    
  5. Das Gerät stellt eine Verbindung mit DPS her und wird einem IoT-Hub zugewiesen. Dann sendet das Gerät eine Telemetrienachricht an den IoT-Hub.

    Loading the certificate...
    Enter the PFX password for certificate.pfx:
    ****
    Found certificate: A33DB11B8883DEE5B1690ACFEAAB69E8E928080B CN=my-x509-device; PrivateKey: True
    Using certificate A33DB11B8883DEE5B1690ACFEAAB69E8E928080B CN=my-x509-device
    Initializing the device provisioning client...
    Initialized for registration Id my-x509-device.
    Registering with the device provisioning service...
    Registration status: Assigned.
    Device my-x509-device registered to MyExampleHub.azure-devices.net.
    Creating X509 authentication for IoT Hub...
    Testing the provisioned device with IoT Hub...
    Sending a telemetry message...
    Finished.
    

In diesem Abschnitt verwenden Sie Ihre Windows-Eingabeaufforderung.

  1. Wählen Sie im Azure-Portal die Registerkarte Übersicht für Ihre Device Provisioning Service-Instanz.

  2. Kopieren Sie die Werte für ID-Bereich und Globaler Geräteendpunkt.

    Screenshot of the I D scope and global device endpoint on Azure portal.

  3. Wechseln Sie in Ihrer Windows-Eingabeaufforderung zum Beispielverzeichnis, und installieren Sie die für das Beispiel erforderlichen Pakete. Der angezeigte Pfad ist relativ zu dem Speicherort, in dem Sie das SDK geklont haben.

    cd ./azure-iot-sdk-node/provisioning/device/samples
    npm install
    
  4. Bearbeiten Sie die Datei register_x509.js, und nehmen Sie folgende Änderungen vor:

    • Ersetzen Sie provisioning host durch den Globalen Geräteendpunkt aus Schritt 1 oben.
    • Ersetzen Sie id scope durch den ID-Bereich aus Schritt 1 oben.
    • Ersetzen Sie registration id durch die Registrierungs-ID aus dem vorherigen Abschnitt.
    • Ersetzen Sie cert filename und key filename durch die zuvor generierten Dateien, device-cert.pem und device-key.pem.
  5. Speichern Sie die Datei .

  6. Führen Sie das Beispiel aus, und überprüfen Sie, ob das Gerät erfolgreich bereitgestellt wurde.

    node register_x509.js
    

Tipp

Die Verwendung des Node.js-Geräte-SDK für Azure IoT Hub ist eine einfache Möglichkeit zum Simulieren eines Geräts. Weitere Informationen finden Sie unter Gerätekonzepte.

In diesem Abschnitt verwenden Sie Ihre Windows-Eingabeaufforderung.

  1. Wählen Sie im Azure-Portal die Registerkarte Übersicht für Ihre Device Provisioning Service-Instanz.

  2. Kopieren Sie die Werte für ID-Bereich und Globaler Geräteendpunkt.

    Screenshot of the I D scope and global device endpoint on Azure portal.

  3. Wechseln Sie in Ihrer Windows-Eingabeaufforderung zum Verzeichnis des Beispiels provision_x509.py. Der angezeigte Pfad ist relativ zu dem Speicherort, in dem Sie das SDK geklont haben.

    cd ./azure-iot-sdk-python/azure-iot-device/samples/async-hub-scenarios
    

    In diesem Beispiel werden sechs Umgebungsvariablen für die Authentifizierung und Bereitstellung eines IoT-Geräts per DPS genutzt. Dies sind die folgenden Umgebungsvariablen:

    Variablenname BESCHREIBUNG
    PROVISIONING_HOST Dieser Wert steht für den globalen Endpunkt für die Verbindungsherstellung mit Ihrer DPS-Ressource.
    PROVISIONING_IDSCOPE Dieser Wert steht für den ID-Bereich für Ihre DPS-Ressource.
    DPS_X509_REGISTRATION_ID Dieser Wert ist die ID für Ihr Gerät. Er muss auch mit dem Antragstellernamen auf dem Gerätezertifikat übereinstimmen.
    X509_CERT_FILE Der Dateiname Ihres Gerätezertifikats.
    X509_KEY_FILE Der Name Ihrer Datei mit dem privaten Schlüssel für Ihr Gerätezertifikat.
    PASS_PHRASE Die Passphrase, die Sie zum Verschlüsseln des Zertifikats und der Datei für den privaten Schlüssel (1234) verwendet haben.
  4. Fügen Sie die Umgebungsvariablen für den globalen Geräteendpunkt und den ID-Bereich hinzu.

    set PROVISIONING_HOST=global.azure-devices-provisioning.net
    set PROVISIONING_IDSCOPE=<ID scope for your DPS resource>
    
  5. Die Registrierungs-ID für das IoT-Gerät muss mit dem Antragstellernamen im Gerätezertifikat übereinstimmen. Wenn Sie ein selbstsigniertes Testzertifikat generiert haben, ist my-x509-device sowohl der Antragstellername als auch die Registrierungs-ID für das Gerät.

  6. Legen Sie die Umgebungsvariable für die Registrierungs-ID wie folgt fest:

    set DPS_X509_REGISTRATION_ID=my-x509-device
    
  7. Legen Sie die Umgebungsvariablen für die Zertifikatdatei, die Datei mit dem privaten Schlüssel und die Passphrase fest.

    set X509_CERT_FILE=./device-cert.pem
    set X509_KEY_FILE=./device-key.pem
    set PASS_PHRASE=1234
    
  8. Sehen Sie sich den Code für provision_x509.py an. Wenn Sie nicht die Python-Version 3.7 oder höher verwenden, führen Sie die hier beschriebene Codeänderung durch, um asyncio.run(main()) zu ersetzen.

  9. Speichern Sie die Änderungen.

  10. Führen Sie das Beispiel aus. Das Beispiel stellt eine Verbindung mit DPS her, wodurch das Gerät für einen IoT-Hub bereitgestellt wird. Nachdem das Gerät bereitgestellt wurde, sendet das Beispiel einige Testnachrichten an den IoT-Hub.

    $ python azure-iot-sdk-python/azure-iot-device/samples/async-hub-scenarios/provision_x509.py
    RegistrationStage(RequestAndResponseOperation): Op will transition into polling after interval 2.  Setting timer.
    The complete registration result is
    my-x509-device
    TestHub12345.azure-devices.net
    initialAssignment
    null
    Will send telemetry from the provisioned device
    sending message #4
    sending message #7
    sending message #2
    sending message #8
    sending message #5
    sending message #9
    sending message #1
    sending message #6
    sending message #10
    sending message #3
    done sending message #4
    done sending message #7
    done sending message #2
    done sending message #8
    done sending message #5
    done sending message #9
    done sending message #1
    done sending message #6
    done sending message #10
    done sending message #3
    

In diesem Abschnitt verwenden Sie sowohl Ihre Windows-Eingabeaufforderung als auch Ihre Git Bash-Eingabeaufforderung.

  1. Wählen Sie im Azure-Portal die Registerkarte Übersicht für Ihre Device Provisioning Service-Instanz.

  2. Kopieren Sie die Werte für ID-Bereich und Globaler Geräteendpunkt.

    Screenshot of the I D scope and global device endpoint on Azure portal.

  3. Navigieren Sie in Ihrer Windows-Eingabeaufforderung zum Ordner des Beispielprojekts. Der angezeigte Pfad ist relativ zu dem Speicherort, in dem Sie das SDK geklont haben.

    cd .\azure-iot-sdk-java\provisioning\provisioning-samples\provisioning-X509-sample
    
  4. Geben Sie im Beispielcode den Bereitstellungsdienst und die X.509-Identitätsinformationen ein. Diese Angaben werden während der Bereitstellung als Nachweis für das simulierte Gerät verwendet, bevor es registriert wird.

    1. Öffnen Sie die Datei .\src\main\java\samples\com/microsoft\azure\sdk\iot\ProvisioningX509Sample.java in Ihrem bevorzugten Text-Editor.

    2. Aktualisieren Sie die folgenden Werte mit dem ID-Bereich und globalen Endpunkt für den Bereitstellungsdienst, die Sie zuvor kopiert haben.

      private static final String idScope = "[Your ID scope here]";
      private static final String globalEndpoint = "[Your Provisioning Service Global Endpoint here]";
      private static final ProvisioningDeviceClientTransportProtocol PROVISIONING_DEVICE_CLIENT_TRANSPORT_PROTOCOL = ProvisioningDeviceClientTransportProtocol.HTTPS;
      
      
    3. Aktualisieren Sie den Wert der konstanten Zeichenfolge leafPublicPem mit dem Wert Ihres Zertifikats, device-cert.pem.

      Die Syntax des Zertifikattexts muss dem unten angegebenen Muster (ohne zusätzliche Leerstellen oder Zeichen) entsprechen.

      private static final String leafPublicPem = "-----BEGIN CERTIFICATE-----\n" +
      "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n" +
          ...
      "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n" +
      "-----END CERTIFICATE-----";        
      

      Das manuelle Aktualisieren dieses Zeichenfolgenwerts kann fehleranfällig sein. Zum Generieren der richtigen Syntax können Sie den folgenden Befehl kopieren und in Ihre Git Bash-Eingabeaufforderung einfügen. Drücken Sie dann die EINGABETASTE. Dieser Befehl generiert die Syntax für den Wert der Zeichenfolgenkonstante leafPublicPem und schreibt sie in die Ausgabe.

      sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' device-cert.pem
      

      Kopieren Sie den ausgegebenen Zertifikattext für den konstanten Wert, und fügen Sie ihn ein.

    4. Aktualisieren Sie den Zeichenfolgenwert der Konstante leafPrivateKey mit dem unverschlüsselten privaten Schlüssel für Ihr Gerätezertifikat, unencrypted-device-key.pem.

      Die Syntax des Texts zum privaten Schlüssel muss dem unten angegebenen Muster (ohne zusätzliche Leerstellen oder Zeichen) entsprechen.

      private static final String leafPrivateKey = "-----BEGIN PRIVATE KEY-----\n" +
      "MIIJJwIBAAKCAgEAtjvKQjIhp0EE1PoADL1rfF/W6v4vlAzOSifKSQsaPeebqg8U\n" +
          ...
      "X7fi9OZ26QpnkS5QjjPTYI/wwn0J9YAwNfKSlNeXTJDfJ+KpjXBcvaLxeBQbQhij\n" +
      "-----END PRIVATE KEY-----";
      

      Das manuelle Aktualisieren dieses Zeichenfolgenwerts kann fehleranfällig sein. Zum Generieren der richtigen Syntax können Sie den folgenden Befehl kopieren und in Ihre Git Bash-Eingabeaufforderung einfügen. Drücken Sie dann die EINGABETASTE. Dieser Befehl generiert die Syntax für den Wert der Zeichenfolgenkonstante leafPrivateKey und schreibt sie in die Ausgabe.

      sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' unencrypted-device-key.pem
      

      Kopieren Sie den ausgegebenen Text zum privaten Schlüssel für den konstanten Wert, und fügen Sie ihn ein.

    5. Speichern Sie die Änderungen.

  5. Erstellen Sie das Beispiel, und wechseln Sie zum Ordner target.

    mvn clean install
    cd target
    
  6. Der Build gibt die JAR-Datei im Ordner target mit folgendem Dateiformat aus: provisioning-x509-sample-{version}-with-deps.jar; Beispiel: provisioning-x509-sample-1.8.1-with-deps.jar. Führen Sie die JAR-Datei aus. Möglicherweise müssen Sie die Version im folgenden Befehl ersetzen.

    java -jar ./provisioning-x509-sample-1.8.1-with-deps.jar
    

    Das Beispiel stellt eine Verbindung mit DPS her, wodurch das Gerät für einen IoT-Hub bereitgestellt wird. Nachdem das Gerät bereitgestellt wurde, sendet das Beispiel einige Testnachrichten an den IoT-Hub.

    Starting...
    Beginning setup.
    WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.
    2022-05-11 09:42:05,025 DEBUG (main) [com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClient] - Initialized a ProvisioningDeviceClient instance using SDK version 2.0.0
    2022-05-11 09:42:05,027 DEBUG (main) [com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClient] - Starting provisioning thread...
    Waiting for Provisioning Service to register
    2022-05-11 09:42:05,030 INFO (global.azure-devices-provisioning.net-6255a8ba-CxnPendingConnectionId-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Opening the connection to device provisioning service...
    2022-05-11 09:42:05,252 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Connection to device provisioning service opened successfully, sending initial device registration message
    2022-05-11 09:42:05,286 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-RegisterTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.RegisterTask] - Authenticating with device provisioning service using x509 certificates
    2022-05-11 09:42:06,083 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Waiting for device provisioning service to provision this device...
    2022-05-11 09:42:06,083 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Current provisioning status: ASSIGNING
    Waiting for Provisioning Service to register
    2022-05-11 09:42:15,685 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Device provisioning service assigned the device successfully
    IotHUb Uri : MyExampleHub.azure-devices.net
    Device ID : java-device-01
    2022-05-11 09:42:25,057 INFO (main) [com.microsoft.azure.sdk.iot.device.transport.ExponentialBackoffWithJitter] - NOTE: A new instance of ExponentialBackoffWithJitter has been created with the following properties. Retry Count: 2147483647, Min Backoff Interval: 100, Max Backoff Interval: 10000, Max Time Between Retries: 100, Fast Retry Enabled: true
    2022-05-11 09:42:25,080 INFO (main) [com.microsoft.azure.sdk.iot.device.transport.ExponentialBackoffWithJitter] - NOTE: A new instance of ExponentialBackoffWithJitter has been created with the following properties. Retry Count: 2147483647, Min Backoff Interval: 100, Max Backoff Interval: 10000, Max Time Between Retries: 100, Fast Retry Enabled: true
    2022-05-11 09:42:25,087 DEBUG (main) [com.microsoft.azure.sdk.iot.device.DeviceClient] - Initialized a DeviceClient instance using SDK version 2.0.3
    2022-05-11 09:42:25,129 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection] - Opening MQTT connection...
    2022-05-11 09:42:25,150 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sending MQTT CONNECT packet...
    2022-05-11 09:42:25,982 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sent MQTT CONNECT packet was acknowledged
    2022-05-11 09:42:25,983 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sending MQTT SUBSCRIBE packet for topic devices/java-device-01/messages/devicebound/#
    2022-05-11 09:42:26,068 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sent MQTT SUBSCRIBE packet for topic devices/java-device-01/messages/devicebound/# was acknowledged
    2022-05-11 09:42:26,068 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection] - MQTT connection opened successfully
    2022-05-11 09:42:26,070 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - The connection to the IoT Hub has been established
    2022-05-11 09:42:26,071 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Updating transport status to new status CONNECTED with reason CONNECTION_OK
    2022-05-11 09:42:26,071 DEBUG (main) [com.microsoft.azure.sdk.iot.device.DeviceIO] - Starting worker threads
    2022-05-11 09:42:26,073 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Invoking connection status callbacks with new status details
    2022-05-11 09:42:26,074 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Client connection opened successfully
    2022-05-11 09:42:26,075 INFO (main) [com.microsoft.azure.sdk.iot.device.DeviceClient] - Device client opened successfully
    Sending message from device to IoT Hub...
    2022-05-11 09:42:26,077 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Message was queued to be sent later ( Message details: Correlation Id [54d9c6b5-3da9-49fe-9343-caa6864f9a02] Message Id [28069a3d-f6be-4274-a48b-1ee539524eeb] )
    Press any key to exit...
    2022-05-11 09:42:26,079 DEBUG (MyExampleHub.azure-devices.net-java-device-01-ee6c362d-Cxn7a1fb819-e46d-4658-9b03-ca50c88c0440-azure-iot-sdk-IotHubSendTask) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Sending message ( Message details: Correlation Id [54d9c6b5-3da9-49fe-9343-caa6864f9a02] Message Id [28069a3d-f6be-4274-a48b-1ee539524eeb] )
    2022-05-11 09:42:26,422 DEBUG (MQTT Call: java-device-01) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - IotHub message was acknowledged. Checking if there is record of sending this message ( Message details: Correlation Id [54d9c6b5-3da9-49fe-9343-caa6864f9a02] Message Id [28069a3d-f6be-4274-a48b-1ee539524eeb] )
    2022-05-11 09:42:26,425 DEBUG (MyExampleHub.azure-devices.net-java-device-01-ee6c362d-Cxn7a1fb819-e46d-4658-9b03-ca50c88c0440-azure-iot-sdk-IotHubSendTask) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Invoking the callback function for sent message, IoT Hub responded to message ( Message details: Correlation Id [54d9c6b5-3da9-49fe-9343-caa6864f9a02] Message Id [28069a3d-f6be-4274-a48b-1ee539524eeb] ) with status OK
    Message sent!
    

Bestätigen der Registrierung der Gerätebereitstellung

Wenn Sie sehen möchten, für welchen IoT-Hub Ihr Gerät bereitgestellt wurde, überprüfen Sie die Registrierungsdetails der einzelnen Registrierung, die Sie zuvor erstellt haben:

  1. Wechseln Sie im Azure-Portal zu Ihrem Device Provisioning Service.

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

  3. Wählen Sie Individuelle Registrierungen aus. Der von Ihnen zuvor erstellte X.509-Registrierungseintrag, my-x509-device, sollte in der Liste angezeigt werden.

  4. Wählen Sie den Registrierungseintrag aus. Der IoT-Hub, dem Ihr Gerät zugewiesen wurde, und dessen Geräte-ID werden unter Registrierungsstatus angezeigt.

    Screenshot that shows the individual enrollment registration status tab for the device on Azure portal.

So überprüfen Sie das Gerät auf Ihrem IoT-Hub:

  1. Wechseln Sie im Azure-Portal zu dem IoT-Hub, dem Ihr Gerät zugewiesen wurde.

  2. Wählen Sie im Menü Geräteverwaltung die Option Geräte aus.

  3. Wenn Ihr Gerät erfolgreich bereitgestellt wurde, sollte dessen Geräte-ID, my-x509-device, in der Liste mit dem StatusAktiviert angezeigt werden. Wenn Ihr Gerät nicht angezeigt wird, wählen Sie Aktualisieren aus.

    Screenshot that shows the device is registered with the I o T hub in Azure portal.

Wichtig

Wenn Sie den anfänglichen Gerätezwillingsstatus im Registrierungseintrag für Ihr Gerät gegenüber dem Standardwert geändert haben, kann der gewünschte Zwillingsstatus vom Hub abgerufen werden, und es können entsprechende Aktionen durchgeführt werden. Weitere Informationen finden Sie unter Verstehen und Verwenden von Gerätezwillingen in IoT Hub.

Bereinigen von Ressourcen

Wenn Sie das Geräteclientbeispiel weiter verwenden und erkunden möchten, sollten Sie die in dieser Schnellstartanleitung erstellten Ressourcen nicht bereinigen. Falls Sie nicht fortfahren möchten, führen Sie die folgenden Schritte aus, um alle Ressourcen zu löschen, die im Rahmen dieser Schnellstartanleitung erstellt wurden.

Löschen der Geräteregistrierung

  1. Schließen Sie auf Ihrem Computer das Ausgabefenster des Geräteclientbeispiels.

  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.

Löschen Ihrer Geräteregistrierung aus IoT Hub

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

  2. Wählen Sie Ihren IoT Hub aus.

  3. Wählen Sie im Menü 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 oben auf der Seite Löschen aus.

Nächste Schritte

Fahren Sie mit der folgenden Schnellstartanleitung fort, um zu lernen, wie Sie Ihr X.509-Gerät programmgesteuert registrieren: