Teilen über


Verbinden eines nachgeschalteten Geräts mit einem Azure IoT Edge-Gateway

Gilt für:Ja-Symbol IoT Edge 1.1

Von großer Bedeutung

IoT Edge 1.1 Ende des Supports war der 13. Dezember 2022. Informationen darüber, wie dieses Produkt, dieser Dienst, diese Technologie oder diese API unterstützt werden, finden Sie im Microsoft Product Lifecycle. Weitere Informationen zum Aktualisieren auf die neueste Version von IoT Edge finden Sie unter Update IoT Edge.

Dieser Artikel enthält Anweisungen zum Einrichten einer vertrauenswürdigen Verbindung zwischen downstreamen Geräten und transparenten IoT Edge-Gateways. In einem transparenten Gatewayszenario kann mindestens ein Gerät Nachrichten über ein einziges Gatewaygerät weiterleiten, das die Verbindung zu IoT Hub aufrechterhält.

Es gibt drei allgemeine Schritte zum Einrichten einer erfolgreichen Verbindung mit einem transparenten Gateway. In diesem Artikel wird der dritte Schritt behandelt:

  1. Konfigurieren Sie das Gatewaygerät als Server, sodass sich nachgeschaltete Geräte mit ihm sicher verbinden können. Richten Sie das Gateway so ein, dass es Nachrichten von nachgeschalteten Geräten empfängt und an das richtige Ziel weiterleitet. Die dazu erforderlichen Schritte finden Sie unter Konfigurieren eines IoT Edge-Geräts als transparentes Gateway.

  2. Erstellen Sie eine Geräteidentität für das nachgeschaltete Gerät, damit es sich bei IoT Hub authentifizieren kann. Konfigurieren Sie das nachgeschaltete Gerät zum Senden von Nachrichten über das Gatewaygerät. Die Schritte finden Sie unter Authentifizieren eines nachgeschalteten Geräts bei Azure IoT Hub.

  3. Verbinden Sie das nachgeschaltete Gerät mit dem Gatewaygerät, und beginnen Sie mit dem Senden von Nachrichten.

In diesem Artikel werden grundlegende Konzepte für nachgeschaltete Geräteverbindungen erläutert. Außerdem erhalten Sie eine Anleitung zum Einrichten Ihrer nachgeschalteten Geräte, indem Sie Folgendes tun:

  • Grundlagen von Transport Layer Security (TLS) und Zertifikaten
  • Eine Erklärung, wie TLS-Bibliotheken über verschiedene Betriebssysteme hinweg funktionieren und wie jedes Betriebssystem mit Zertifikaten umgeht.
  • Gehen Sie durch Azure IoT-Beispiele in mehreren Sprachen, um Ihnen den Einstieg zu erleichtern.

In diesem Artikel beziehen sich die Begriffe Gateway und IoT Edge-Gateway auf ein IoT Edge-Gerät, das als transparentes Gateway konfiguriert ist.

Hinweis

Ein nachgeschaltetes Gerät gibt Daten direkt an das Internet oder an Gatewaygeräte (IoT Edge-fähig oder nicht) aus. Ein untergeordnetes Gerät kann in einer geschachtelten Topologie entweder ein nachgeschaltetes Gerät oder ein Gateway-Gerät sein.

Voraussetzungen

  • Vergewissern Sie sich, dass die Zertifikatdatei der Stammzertifizierungsstelle, die zur Erstellung des Gerätezertifizierungsstellenzertifikats in "Konfigurieren eines IoT Edge-Geräts als transparentes Gateway" verwendet wurde, auf Ihrem Downstream-Gerät verfügbar ist. Das nachgeschaltete Gerät verwendet dieses Zertifikat zum Überprüfen der Identität des Gatewaygeräts. Wenn Sie die Demozertifikate verwendet haben, wird das Zertifikat der Stammzertifizierungsstelle als "azure-iot-test-only.root.ca.cert.pem" bezeichnet.
  • Weisen Sie die geänderte Verbindungszeichenfolge auf, die auf das Gatewaygerät verweist, wie unter "Authentifizieren eines nachgeschalteten Geräts bei Azure IoT Hub" erläutert.

Vorbereiten eines nachgeschalteten Geräts

Ein nachgeschaltetes Gerät kann eine beliebige Anwendung oder Plattform sein, deren Identität mit dem Azure IoT Hub-Clouddienst erstellt wurde. Oft verwenden diese Anwendungen das Azure IoT-Geräte-SDK. Ein nachgeschaltetes Gerät kann sogar eine Anwendung sein, die auf dem IoT Edge-Gatewaygerät selbst ausgeführt wird. Allerdings kann ein IoT Edge-Gerät einem IoT Edge-Gateway nicht nachgeschaltet werden.

Hinweis

Mit IoT Hub registrierte IoT-Geräte können mithilfe von Modulzwillingen verschiedene Prozesse, Hardware oder Funktionen auf einem einzigen Gerät isolieren. IoT Edge-Gateways unterstützen nachgeschaltete Modulverbindungen mithilfe von Authentifizierung mit symmetrischen Schlüsseln, aber nicht mit X.509-Zertifikatauthentifizierung.

Zum Verbinden eines nachgeschalteten Geräts mit einem Azure IoT Edge-Gateway ist Folgendes erforderlich:

  • Ein Gerät oder eine Anwendung, die mit einer IoT-Hub-Geräteverbindungszeichenfolge konfiguriert ist, der Informationen hinzugefügt wurden, um die Verbindung mit dem Gateway herzustellen.

    Dieser Schritt wurde im vorherigen Artikel abgeschlossen: Authentifizieren eines nachgeschalteten Geräts bei Azure IoT Hub.

  • Das Gerät oder die Anwendung muss dem Stammzertifizierungsstellenzertifikat des Gateways vertrauen, um die TLS-Verbindungen (Transport Layer Security) mit dem Gatewaygerät zu überprüfen.

    Dieser Schritt wird im weiteren Verlauf dieses Artikels ausführlich erläutert. Dieser Schritt kann auf zwei Arten ausgeführt werden: durch Installation des Zertifizierungsstellenzertifikats (ZS-Zertifikat) im Zertifikatspeicher des Betriebssystems oder (für bestimmte Sprachen) durch Verweisen auf das Zertifikat in Anwendungen mit Azure IoT SDKs.

Grundlagen von TLS und Zertifikaten

Die sichere Verbindung nachgeschalteter Geräte mit IoT Edge unterliegt den gleichen Herausforderungen wie jede andere sichere Client/Server-Kommunikation, die über das Internet erfolgt. Ein Client und ein Server kommunizieren mithilfe von Transport Layer Security (TLS) sicher über das Internet. TLS wird mit Standardkonstrukten der Public Key-Infrastruktur erstellt, die als Zertifikate bezeichnet werden. TLS ist ziemlich raffiniert und deckt zahlreiche Themen in Hinblick auf die Sicherung von zwei Endpunkten ab. In diesem Abschnitt sind die für Sie relevanten Konzepte zusammengefasst, um eine sichere Verbindung von Geräten mit einem IoT Edge-Gateway herzustellen.

Wenn sich ein Client mit einem Server verbindet, präsentiert der Server eine Kette von Zertifikaten, die als Serverzertifikatkette bezeichnet wird. Eine Zertifikatkette besteht in der Regel aus einem Stammzertifizierungsstellen-Zertifikat, einem oder mehreren Zwischenzertifizierungsstellenzertifikaten und schließlich dem Zertifikat des Servers selbst. Ein Client stellt eine Vertrauensstellung mit einem Server her, indem er die gesamte Serverzertifikatkette kryptographisch überprüft. Diese Clientüberprüfung der Serverzertifikatkette wird als Serverkettenüberprüfung bezeichnet. Der Client fordert den Server im Prozess Eigentumsnachweis auf, den Besitz des privaten Schlüssels nachzuweisen, der dem Serverzertifikat zugeordnet ist. Die Kombination aus Serverkettenüberprüfung und Eigentumsnachweis wird als Serverauthentifizierung bezeichnet. Zur Validierung einer Serverzertifikatkette benötigt der Client eine Kopie des Stammzertifikats der Zertifizierungsstelle (CA), mit dem das Serverzertifikat erstellt oder ausgestellt wurde. Normalerweise ist ein Browser beim Verbinden mit Websites mit häufig verwendeten CA-Zertifikaten vorkonfiguriert, damit der Verbindungsprozess für den Nutzer nahtlos abläuft.

Wenn sich ein Gerät mit Azure IoT Hub verbindet, ist das Gerät der Client und der IoT Hub-Clouddienst der Server. Der IoT-Hub-Clouddienst wird durch ein Stamm-CA-Zertifikat namens Baltimore CyberTrust Root gesichert, das öffentlich verfügbar und weit verbreitet ist. Da das IoT Hub-ZS-Zertifikat auf den meisten Geräten bereits installiert ist, wird es von vielen TLS-Implementierungen (OpenSSL, Schannel, LibreSSL) bei der Serverzertifikatüberprüfung automatisch verwendet. Allerdings kann ein Gerät, das sich erfolgreich mit dem IoT Hub verbindet, möglicherweise Probleme beim Verbinden mit einem IoT Edge-Gateway haben.

Wenn sich ein Gerät mit einem IoT Edge-Gateway verbindet, ist das nachgeschaltete Gerät der Client und das Gatewaygerät der Server. Mit Azure IoT Edge können Sie Gatewayzertifikatketten nach Belieben erstellen. Sie haben die Möglichkeit, ein öffentliches Zertifikat der Zertifizierungsstelle (z. B. Baltimore) oder ein selbstsigniertes (oder internes) Zertifikat der Stammzertifizierungsstelle zu verwenden. Öffentliche ZS-Zertifikate sind oft mit Kosten verbunden und werden deswegen i.d.R. in Produktionsszenarien eingesetzt. Selbstsignierte CA-Zertifikate werden für Entwicklung und Tests bevorzugt. Wenn Sie die Demozertifikate verwenden, handelt es sich dabei um selbstsignierte CA-Stammzertifikate.

Wenn Sie ein selbstsigniertes Stamm-CA-Zertifikat für ein IoT Edge-Gateway verwenden, muss es auf allen nachgeschalteten Geräten installiert oder den Geräten zur Verfügung gestellt werden, die sich mit dem Gateway verbinden wollen.

Gateway-Zertifikat-Setup

Weitere Informationen zu IoT Edge-Zertifikaten und einigen Auswirkungen auf die Produktion finden Sie unter Details zur Verwendung von IoT Edge-Zertifikaten.

Bereitstellen des Stamm-CA-Zertifikats

Um die Zertifikate des Gatewaygeräts zu überprüfen, muss das nachgeschaltete Gerät über eine eigene Kopie des Stamm-CA-Zertifikats verfügen. Wenn Sie die im IoT Edge-Git-Repository bereitgestellten Skripts zum Erstellen von Testzertifikaten verwendet haben, hat das Stamm-ZS-Zertifikat den Namen azure-iot-test-only.root.ca.cert.pem. Wenn Sie dies nicht bereits im Rahmen der anderen Vorbereitungsschritte für das nachgeschaltete Gerät getan haben, verschieben Sie diese Zertifikatdatei in ein beliebiges Verzeichnis auf Ihrem nachgeschalteten Gerät. Sie können einen Dienst wie Azure Key Vault oder eine Funktion wie Secure Copy Protocol zum Verschieben der Zertifikatdatei verwenden.

Installieren von Zertifikaten im Betriebssystem

Sobald sich das Stammzertifizierungsstellenzertifikat auf dem nachgeschalteten Gerät befindet, müssen Sie sicherstellen, dass die Anwendungen, die eine Verbindung mit dem Gateway herstellen, auf das Zertifikat zugreifen können.

Die Installation des Stamm-ZS-Zertifikats im Zertifikatspeicher des Betriebssystems ermöglicht den meisten Anwendungen die Verwendung des Stamm-ZS-Zertifikats. Es gibt einige Ausnahmen, z.B. die NodeJS-Anwendungen, die nicht den Zertifikatspeicher des Betriebssystems verwenden, sondern den internen Zertifikatspeicher der Node-Runtime. Wenn Sie das Zertifikat nicht auf Betriebssystemebene installieren können, fahren Sie mit Verwenden von Zertifikaten mit Azure IoT SDKs fort.

Ubuntu

Die folgenden Befehle sind ein Beispiel für die Installation eines ZS-Zertifikats auf einem Ubuntu-Host. In diesem Beispiel wird davon ausgegangen, dass Sie das Zertifikat azure-iot-test-only.root.ca.cert.pem aus den Artikeln über die Voraussetzungen verwenden und das Zertifikat an einen Speicherort auf dem nachgeschalteten Gerät kopiert haben.

sudo cp <path>/azure-iot-test-only.root.ca.cert.pem /usr/local/share/ca-certificates/azure-iot-test-only.root.ca.cert.pem.crt
sudo update-ca-certificates

Es sollte die Meldung „Updating certificates in /etc/ssl/certs 1 added, 0 removed; done“ (Zertifikate in /etc/ssl/certs werden aktualisiert... 1 hinzugefügt, 0 entfernt; fertig) angezeigt werden.

Fenster

Die folgenden Schritte sind ein Beispiel dafür, wie man ein CA-Zertifikat auf einem Windows-Host installiert. In diesem Beispiel wird davon ausgegangen, dass Sie das Zertifikat azure-iot-test-only.root.ca.cert.pem aus den Artikeln über die Voraussetzungen verwenden und das Zertifikat an einen Speicherort auf dem nachgeschalteten Gerät kopiert haben.

Sie können Zertifikate mit Import-Certificate von PowerShell als Administrator installieren:

import-certificate  <file path>\azure-iot-test-only.root.ca.cert.pem -certstorelocation cert:\LocalMachine\root

Außerdem können Sie Zertifikate mit dem Hilfsprogramm certlm installieren:

  1. Suchen Sie im Startmenü nach Computerzertifikate verwalten, und wählen Sie die Option aus. Daraufhin wird das Hilfsprogramm certlm geöffnet.
  2. Navigieren Sie zu Zertifikate – Lokaler Computer>Vertrauenswürdige Stammzertifizierungsstellen.
  3. Klicken Sie mit der rechten Maustaste auf Zertifikat, und wählen Sie Alle Aufgaben>Importieren aus. Der Zertifikatimport-Assistent wird gestartet.
  4. Folgen Sie den Anweisungen und importieren Sie die Zertifikatsdatei <path>/azure-iot-test-only.root.ca.cert.pem. Wenn Sie damit fertig sind, sollte die Meldung „Der Import war erfolgreich.“ angezeigt werden.

Sie können Zertifikate auch programmgesteuert über .NET-APIs installieren (siehe .NET-Beispiel weiter unten in diesem Artikel).

I.d.R. verwenden Anwendungen den von Windows bereitgestellten TLS-Stapel namens Schannel, um eine sichere Verbindung über TLS herzustellen. Schannel erfordert , dass alle Zertifikate im Windows-Zertifikatspeicher installiert werden, bevor versucht wird, eine TLS-Verbindung herzustellen.

Verwenden von Zertifikaten mit Azure IoT SDKs

In diesem Abschnitt wird beschrieben, wie die Azure IoT-SDKs mithilfe einfacher Beispielanwendungen eine Verbindung mit einem IoT Edge-Gerät herstellen. Ziel aller Beispiele ist es, den Geräteclient zu verbinden und Telemetrienachrichten an das Gateway zu senden und dann die Verbindung zu schließen und zu beenden.

Lassen Sie sich zwei Dinge vorbereiten, bevor Sie die Beispiele auf Anwendungsebene verwenden:

  • Die IoT Hub-Verbindungszeichenfolge Ihres nachgeschalteten Geräts wurde geändert, sodass sie auf das Gateway-Gerät verweist, sowie alle Zertifikate, die erforderlich sind, um Ihr nachgeschaltetes Gerät beim IoT Hub zu authentifizieren. Weitere Informationen finden Sie unter Authentifizieren eines nachgeschalteten Geräts bei Azure IoT Hub.

  • Der vollständige Pfad zum Stamm-CA-Zertifikat, den Sie kopiert und irgendwo auf Ihrem nachgeschalteten Gerät gespeichert haben.

    Beispiel: <path>/azure-iot-test-only.root.ca.cert.pem.

NodeJS

Dieser Abschnitt enthält eine Beispielanwendung zum Verbinden eines Azure IoT-NodeJS-Geräteclients mit einem IoT Edge-Gateway. Für Node.js-Anwendungen müssen Sie das Stammzertifikat der Zertifizierungsstelle auf Anwendungsebene installieren, wie hier gezeigt. NodeJS-Anwendungen verwenden nicht den Zertifikatspeicher des Systems.

  1. Rufen Sie das Beispiel für edge_downstream_device.js aus dem Repository für das Azure IoT-Geräte-SDK für Node.js-Beispiele ab.
  2. Stellen Sie sicher, dass alle Voraussetzungen zum Ausführen des Beispiels erfüllt sind, indem Sie die Datei readme.md überprüfen.
  3. Aktualisieren Sie in der Datei „edge_downstream_device_device.js“ die Variablen connectionString und edge_ca_cert_path.
  4. In der SDK-Dokumentation finden Sie Anweisungen zum Ausführen des Beispiels auf Ihrem Gerät.

Zum besseren Verständnis dieses Beispiels zeigt der folgende Codeausschnitt, wie das Client-SDK die Zertifikatsdatei liest und damit eine sichere TLS-Verbindung herstellt:

// Provide the Azure IoT device client via setOptions with the X509
// Edge root CA certificate that was used to setup the Edge runtime
var options = {
    ca : fs.readFileSync(edge_ca_cert_path, 'utf-8'),
};

.NET

Dieser Abschnitt stellt eine Beispielanwendung zum Verbinden eines Azure IoT-.NET-Geräteclients mit einem IoT Edge-Gateway vor. .NET-Anwendungen können automatisch alle installierten Zertifikate im Systemzertifikatspeicher sowohl auf Linux- als auch auf Windows-Hosts verwenden.

  1. Rufen Sie das Beispiel für EdgeDownstreamDevice aus dem Ordner IoT Edge-.NET-Beispiele ab.
  2. Stellen Sie sicher, dass alle Voraussetzungen zum Ausführen des Beispiels erfüllt sind, indem Sie die Datei readme.md überprüfen.
  3. Aktualisieren Sie in der Datei Properties/launchSettings.json die Variablen DEVICE_CONNECTION_STRING und CA_CERTIFICATE_PATH. Wenn Sie das im vertrauenswürdigen Zertifikatspeicher auf dem Hostsystem installierte Zertifikat verwenden möchten, lassen Sie diese Variable leer.
  4. In der SDK-Dokumentation finden Sie Anweisungen zum Ausführen des Beispiels auf Ihrem Gerät.

Um ein vertrauenswürdiges Zertifikat programmgesteuert über eine .NET-Anwendung im Zertifikatspeicher zu installieren, verwenden Sie die Funktion InstallCACert() in der Datei EdgeDownstreamDevice/Program.cs. Dieser Vorgang ist idempotent, sodass er mehrmals mit denselben Werten ohne zusätzliche Wirkung ausgeführt werden kann.

C

Dieser Abschnitt stellt eine Beispielanwendung zum Verbinden eines Azure IoT-C-Geräteclients mit einem IoT Edge-Gateway vor. Das C SDK ist mit vielen TLS-Bibliotheken kompatibel, darunter OpenSSL, WolfSSL und Schannel. Weitere Informationen finden Sie im Azure IoT C SDK.

  1. Rufen Sie die Anwendung iotedge_downstream_device_sample aus den Beispielen für das Azure IoT-Geräte-SDK für C ab.
  2. Stellen Sie sicher, dass alle Voraussetzungen zum Ausführen des Beispiels erfüllt sind, indem Sie die Datei readme.md überprüfen.
  3. Aktualisieren Sie in der Datei „iotedge_downstream_device_sample.c“ die Variablen connectionString und edge_ca_cert_path.
  4. In der SDK-Dokumentation finden Sie Anweisungen zum Ausführen des Beispiels auf Ihrem Gerät.

Das Azure IoT-Geräte-SDK für C bietet die Möglichkeit, bei der Einrichtung des Clients ein CA-Zertifikat zu registrieren. Dieser Vorgang installiert das Zertifikat nicht, sondern verwendet ein Zeichenfolgenformat des Zertifikats im Speicher. Das gespeicherte Zertifikat wird dem zugrunde liegenden TLS-Stapel beim Verbindungsaufbau bereitgestellt.

(void)IoTHubDeviceClient_SetOption(device_handle, OPTION_TRUSTED_CERT, cert_string);

Hinweis

Die Methode zum Registrieren eines Zertifikats der Zertifizierungsstelle bei der Einrichtung des Clients kann sich ändern, wenn ein verwaltetes Paket oder eine verwaltete Bibliothek verwendet wird. So muss beispielsweise für die auf der Arduino-IDE basierende Bibliothek das Zertifizierungsstellenzertifikat einem Zertifikatarray hinzugefügt werden, das in einer globalen Datei vom Typ certs.c definiert ist, anstatt den Vorgang IoTHubDeviceClient_LL_SetOption zu verwenden.

Wenn Sie weder OpenSSL noch andere TLS-Bibliotheken verwenden, nutzt das SDK auf Windows-Hosts standardmäßig Schannel. Damit Schannel funktioniert, muss das IoT Edge Root-CA-Zertifikat im Windows-Zertifikatspeicher installiert werden und darf nicht mit dem Vorgang IoTHubDeviceClient_SetOption eingerichtet werden.

Java

Dieser Abschnitt stellt eine Beispielanwendung zum Verbinden eines Azure IoT-Java-Geräteclients mit einem IoT Edge-Gateway vor.

  1. Rufen Sie das Beispiel für Send-event aus den Beispielen für das Azure IoT-Geräte-SDK für Java ab.
  2. Stellen Sie sicher, dass alle Voraussetzungen zum Ausführen des Beispiels erfüllt sind, indem Sie die Datei readme.md überprüfen.
  3. In der SDK-Dokumentation finden Sie Anweisungen zum Ausführen des Beispiels auf Ihrem Gerät.

Python

Dieser Abschnitt stellt eine Beispielanwendung zum Verbinden eines Azure IoT-Python-Geräteclients mit einem IoT Edge-Gateway vor.

  1. Rufen Sie das Beispiel für send_message_downstream aus den Beispielen zum Azure IoT-Geräte-SDK für Python ab.
  2. Legen Sie die Umgebungsvariablen IOTHUB_DEVICE_CONNECTION_STRING und IOTEDGE_ROOT_CA_CERT_PATH wie in den Python-Skriptkommentaren angegeben fest.
  3. Weitere Anweisungen zum Ausführen des Beispiels auf Ihrem Gerät finden Sie in der SDK-Dokumentation.

Testen der Gatewayverbindung

Verwenden Sie diesen Beispielbefehl auf dem nachgeschalteten Gerät, um zu testen, ob es eine Verbindung mit dem Gatewaygerät herstellen kann:

openssl s_client -connect mygateway.contoso.com:8883 -CAfile <CERTDIR>/certs/azure-iot-test-only.root.ca.cert.pem -showcerts

Dieser Befehl testet Verbindungen über MQTTS (Port 8883). Wenn Sie ein anderes Protokoll verwenden, passen Sie den Befehl nach Bedarf für AMQPS (5671) oder HTTPS (443) an.

Die Ausgabe dieses Befehls kann umfangreich sein und Informationen über alle Zertifikate in der Zertifikatskette umfassen. Wenn Ihre Verbindung erfolgreich ist, wird eine Zeile wie Verification: OK oder Verify return code: 0 (ok) angezeigt.

Überprüfen der Gatewayverbindung

Probleme mit der Gateway-Verbindung beheben

Wenn Ihr nachgeschaltetes Gerät intermittierende Verbindungsprobleme mit seinem Gateway-Gerät hat, versuchen Sie die folgenden Schritte zur Lösung.

  1. Ist der Hostname des Gateways in der Verbindungszeichenfolge mit dem Hostnamenwert in der IoT Edge-Konfigurationsdatei auf dem Gatewaygerät identisch?
  2. Kann der Hostname des Gateways in eine IP-Adresse aufgelöst werden? Sie können zeitweilige Verbindungen entweder über DNS oder durch Hinzufügen eines Eintrags in die Hostdatei auf dem nachgeschalteten Gerät lösen.
  3. Sind in Ihrer Firewall Kommunikationsports geöffnet? Auf der Grundlage des verwendeten Protokolls (MQTTS:8883/AMQPS:5671/HTTPS:433) muss Kommunikation zwischen dem nachgeschalteten Gerät und dem transparenten IoT Edge möglich sein.

Nächste Schritte

Erfahren Sie, wie IoT Edge Offlinefunktionen für nachgeschaltete Geräte erweitern kann.