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

Gilt für:IoT Edge 1.4 Häkchen IoT Edge 1.4

Wichtig

IoT Edge Version 1.4 wird unterstützt. Wenn Sie ein früheres Release verwenden, finden Sie weitere Informationen unter Aktualisieren von IoT Edge.

Hier finden Sie eine Anleitung zum Herstellen einer vertrauenswürdigen Verbindung zwischen nachgeschalteten 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. Gateway und IoT Edge-Gateway beziehen sich hier auf ein IoT Edge-Gerät, das als transparentes Gateway konfiguriert wurde.

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 ein nachgeschaltetes Gerät oder ein Gatewaygerät in einer geschachtelten Topologie sein.

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

  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.

Dieser Artikel hilft Ihnen dabei, Verbindungskomponenten nachgeschalteter Geräte besser zu verstehen, z. B.:

  • Grundlegendes zu Transport Layer Security (TLS) und Zertifikaten
  • TLS-Bibliotheken unter verschiedenen Betriebssystemen, die Zertifikate unterschiedlich behandeln

Anschließend durchlaufen Sie Azure IoT-Beispiele in Ihrer bevorzugten Programmiersprache, um Ihr Gerät zum Senden von Nachrichten an das Gateway zu konfigurieren.

Voraussetzungen

Für die Vorbereitung Ihres nachgeschalteten Geräts benötigen Sie Folgendes:

  • Ein nachgeschaltetes Gerät.

    Dieses 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 auch eine Anwendung sein, die auf dem IoT Edge-Gatewaygerät selbst ausgeführt wird.

    Weiter unten in diesem Artikel finden Sie die Schritte, die ausgeführt werden müssen, um ein IoT-Gerät als nachgeschaltetes Gerät zu verbinden. Wenn Sie lieber ein IoT Edge-Gerät als nachgeschaltetes Gerät verwenden möchten, lesen Sie Verknüpfen von Azure IoT Edge-Geräten zum Erstellen einer Hierarchie (Nested Edge).

  • Eine Zertifikatdatei von einer Stammzertifizierungsstelle.

    Diese Datei wurde in Konfigurieren eines IoT Edge-Geräts als transparentes Gateway verwendet, um das Zertifikat der Gerätezertifizierungsstelle zu generieren, das auf Ihrem nachgeschalteten Gerät verfügbar ist.

    Das nachgeschaltete Gerät verwendet dieses Zertifikat zum Überprüfen der Identität des Gatewaygeräts. Dieses vertrauenswürdige Zertifikat überprüft die TLS-Verbindungen (Transport Layer Security) mit dem Gatewaygerät. Details zur Verwendung finden Sie im Abschnitt Bereitstellen des Stamm-ZS-Zertifikats.

  • Eine geänderte Verbindungszeichenfolge, die auf das Gatewaygerät verweist.

    Die Vorgehensweise zum Ändern Ihrer Verbindungszeichenfolge wird unter Authentifizieren eines nachgeschalteten Geräts bei Azure IoT Hub erläutert.

Hinweis

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

Grundlegendes zu 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 i.d.R. aus einem Stammzertifizierungsstellen-Zertifikat, mindestens einem Zwischen-ZS-Zertifikat und 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. Zum Überprüfen einer Serverzertifikatkette benötigt der Client eine Kopie des Stamm-ZS-Zertifikats, mit dem das Serverzertifikat erstellt (oder ausgestellt) wurde. Ein Browser ist für die Verbindungsherstellung mit Websites üblicherweise mit gängigen ZS-Zertifikaten vorkonfiguriert, um für den Client einen nahtlosen Ablauf zu gewährleisten.

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-ZS-Zertifikat namens Baltimore CyberTrust Root gesichert, das öffentlich verfügbar und weitverbreitet 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 hat ein Gerät, das sich mit IoT Hub erfolgreich verbinden kann, hat möglicherweise Probleme beim Verbinden mit einem IoT Edge-Gateway.

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 ZS-Zertifikate werden für Entwicklung und Tests bevorzugt. Die Demozertifikate sind selbstsignierte Zertifikate der Stammzertifizierungsstelle.

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

Screenshot: Setup der Gatewayzertifikate

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-ZS-Zertifikats

Um die Zertifikate des Gatewaygeräts zu überprüfen, muss das nachgeschaltete Gerät über eine eigene Kopie des Stamm-ZS-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.

Falls noch nicht geschehen, verschieben Sie diese Zertifikatdatei in ein beliebiges Verzeichnis auf Ihrem nachgeschalteten Gerät. Dazu haben Sie zwei Möglichkeiten: Sie können das ZS-Zertifikat im Zertifikatspeicher des Betriebssystems installieren oder (bei bestimmten Programmiersprachen) in Anwendungen mithilfe der Azure IoT SDKs auf das Zertifikat verweisen.

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

Wenn sich das Zertifikat der Stammzertifizierungsstelle 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.

Installieren Sie das Zertifikat der Stammzertifizierungsstelle unter Ubuntu oder Windows.

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 <file 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.

Verwenden von Zertifikaten mit Azure IoT SDKs

Azure IoT SDKs verwenden einfache Beispielanwendungen, um eine Verbindung mit einem IoT Edge-Gerät herzustellen. Das Ziel der Beispiele besteht darin, die Verbindung für den Geräteclient herzustellen, Telemetrienachrichten an das Gateway zu senden und dann die Verbindung zu schließen und die Anwendung zu beenden.

Für die Verwendung der Beispiele auf Anwendungsebene wird Folgendes benötigt:

  • Die IoT Hub-Verbindungszeichenfolge Ihres nachgeschalteten Geräts, die so geändert wurde, dass sie auf das Gatewaygerät verweist.

  • Alle Zertifikate, die erforderlich sind, um Ihr nachgeschaltetes Gerät bei IoT Hub zu authentifizieren. Weitere Informationen finden Sie unter Authentifizieren eines nachgeschalteten Geräts bei Azure IoT Hub.

  • Sie haben den vollständigen Pfad zum Stamm-ZS-Zertifikat kopiert und auf Ihrem nachgeschalteten Gerät gespeichert.

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

Nun können Sie Zertifikate mit einem Beispiel in der von Ihnen bevorzugten Programmiersprache verwenden:

Dieser Abschnitt enthält eine Beispielanwendung zum Verbinden eines Azure IoT-NodeJS-Geräteclients mit einem IoT Edge-Gateway. Für NodeJS-Anwendungen müssen Sie das Stamm-ZS-Zertifikat auf Anwendungsebene installieren, wie es hier gezeigt ist. 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'),
};

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 die Verbindung ü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 ist möglicherweise lang, einschließlich Informationen zu allen Zertifikaten in der Kette. Wenn Ihre Verbindung erfolgreich hergestellt wurde, wird eine Zeile wie Verification: OK oder Verify return code: 0 (ok) angezeigt.

Screenshot: Überprüfung einer Gatewayverbindung

Problembehandlung bei der Gatewayverbindung

Wenn die Verbindung zwischen Ihrem nachgeschalteten Gerät und dem zugehörigen Gatewaygerät instabil ist, sehen Sie sich die folgenden Fragen an, um eine Lösung zu finden:

  • Ist der Hostname des Gateways in der Verbindungszeichenfolge mit dem Hostnamenwert in der IoT Edge-Konfigurationsdatei auf dem Gatewaygerät identisch?
  • 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.
  • 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.