Verbinden eines nachgeschalteten Geräts mit einem Azure IoT Edge-Gateway
Gilt für: IoT Edge 1.1
Wichtig
IoT Edge 1.1: Datum für das Supportende war der 13. Dezember 2022. Informationen zur Unterstützung für dieses Produkt, diesen Dienst, diese Technologie oder diese API finden Sie in der Microsoft Lifecycle-Richtlinie. Weitere Informationen zum Aktualisieren auf die neueste Version von IoT Edge finden Sie unter Update IoT Edge.
Dieser Artikel enthält Anweisungen 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.
Es gibt drei allgemeine Schritte zum Einrichten einer erfolgreichen Verbindung mit einem transparenten Gateway. In diesem Artikel wird der dritte Schritt behandelt:
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.
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.
Verbinden Sie das nachgeschaltete Gerät mit dem Gatewaygerät, und beginnen Sie mit dem Senden von Nachrichten.
In diesem Artikel werden grundlegende Konzepte beim Verbinden nachgeschalteter Geräte und das Einrichten dieser Geräte erläutert:
- Grundlagen von Transport Layer Security (TLS) und Zertifikaten
- Funktionsweise von TLS-Bibliotheken mit verschiedenen Betriebssystemen und Verarbeiten von Zertifikaten durch die Betriebssysteme
- Azure IoT-Beispiele für mehrere Sprachen zum Einstieg
In diesem Artikel beziehen sich die Begriffe Gateway und IoT Edge-Gateway 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.
Voraussetzungen
- Auf Ihrem nachgeschalteten Gerät muss die Datei für das Zertifikat der Stammzertifizierungsstelle zur Verfügung stehen, mit der das Zertifikat der Gerätezertifizierungsstelle in Konfigurieren eines IoT Edge-Geräts als transparentes Gateway generiert wurde. Das nachgeschaltete Gerät verwendet dieses Zertifikat zum Überprüfen der Identität des Gatewaygeräts. Wenn Sie die Demozertifikate verwendet haben, hat das Stammzertifikat der Zertifizierungsstelle den Namen azure-iot-test-only.root.ca.cert.pem.
- Sie verfügen über die geänderte Verbindungszeichenfolge, 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 zu 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äte oder eine Anwendung, die mit einer IoT Hub-Geräte-Verbindungszeichenfolge konfiguriert ist, der Informationen für die Verbindung mit dem Gateway angefügt sind.
Dieser Schritt wurde im vorherigen Artikel, Authentifizieren eines nachgeschalteten Geräts bei Azure IoT Hub, abgeschlossen.
Das Gerät oder die Anwendung muss dem Zertifikat der Stammzertifizierungsstelle 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 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. Normalerweise ist ein Browser beim Verbinden mit Websites mit häufig verwendeten ZS-Zertifikaten vorkonfiguriert, um den Workflow des Clients zu vereinfachen.
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. Wenn Sie die Demozertifikate verwenden, handelt es sich dabei um 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.
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. Verschieben Sie diese Zertifikatdatei in ein beliebiges Verzeichnis auf dem nachgeschalteten Gerät, wenn dies noch im Rahmen der anderen Vorbereitungsschritte für nachgeschaltete Geräte geschehen ist. 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.
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.
Windows
Die folgenden Schritte sind ein Beispiel für die Installation eines ZS-Zertifikats auf einem Windows-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.
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:
- Suchen Sie im Startmenü nach Computerzertifikate verwalten, und wählen Sie die Option aus. Daraufhin wird das Hilfsprogramm certlm geöffnet.
- Navigieren Sie zu Zertifikate – Lokaler Computer>Vertrauenswürdige Stammzertifizierungsstellen.
- Klicken Sie mit der rechten Maustaste auf Zertifikat, und wählen Sie Alle Aufgaben>Importieren aus. Der Zertifikatimport-Assistent wird gestartet.
- 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 eine TLS-Verbindung hergestellt werden kann.
Verwenden von Zertifikaten mit Azure IoT SDKs
In diesem Abschnitt wird beschrieben, wie sich die Azure IoT SDKs mithilfe einfacher Beispielanwendungen mit einem IoT Edge-Gerät verbinden. Das Ziel aller Beispielanwendungen ist es, den Geräteclient zu verbinden und Telemetrienachrichten an das Gateway zu senden, dann die Verbindung zu schließen und zu beenden.
Zwei Voraussetzungen müssen erfüllt sein, bevor Sie die Anwendungsbeispiele verwenden können:
Die IoT Hub-Verbindungszeichenfolge Ihres nachgeschalteten Geräts, muss so geändert sein, dass sie auf das Gatewaygerät verweist, und sämtliche Zertifikate müssen vorhanden sein, die erforderlich sind, um Ihre nachgeschaltetes Gerät beim 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:
<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 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.
- 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.
- Stellen Sie sicher, dass alle Voraussetzungen zum Ausführen des Beispiels erfüllt sind, indem Sie die Datei readme.md überprüfen.
- Aktualisieren Sie in der Datei „edge_downstream_device_device.js“ die Variablen connectionString und edge_ca_cert_path.
- 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.
- Rufen Sie das Beispiel für EdgeDownstreamDevice aus dem Ordner IoT Edge-.NET-Beispiele ab.
- Stellen Sie sicher, dass alle Voraussetzungen zum Ausführen des Beispiels erfüllt sind, indem Sie die Datei readme.md überprüfen.
- 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.
- 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 mehrfach mit den gleichen Werten ohne weitere Auswirkungen ausgeführt werden kann.
K
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 unter Azure IoT SDK für C.
- Rufen Sie die Anwendung iotedge_downstream_device_sample aus den Beispielen für das Azure IoT-Geräte-SDK für C ab.
- Stellen Sie sicher, dass alle Voraussetzungen zum Ausführen des Beispiels erfüllt sind, indem Sie die Datei readme.md überprüfen.
- Aktualisieren Sie in der Datei „iotedge_downstream_device_sample.c“ die Variablen connectionString und edge_ca_cert_path.
- 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, beim Einrichten des Clients ein ZS-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 Zertifizierungsstellenzertifikats bei der Clienteinrichtung 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-Stamm-ZS-Zertifikat im Windows-Zertifikatspeicher installiert und nicht mit 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.
- Rufen Sie das Beispiel für Send-event aus den Beispielen für das Azure IoT-Geräte-SDK für Java ab.
- Stellen Sie sicher, dass alle Voraussetzungen zum Ausführen des Beispiels erfüllt sind, indem Sie die Datei readme.md überprüfen.
- 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.
- Rufen Sie das Beispiel für send_message_downstream aus den Beispielen zum Azure IoT-Geräte-SDK für Python ab.
- Legen Sie die Umgebungsvariablen
IOTHUB_DEVICE_CONNECTION_STRING
undIOTEDGE_ROOT_CA_CERT_PATH
wie in den Python-Skriptkommentaren angegeben fest. - In der SDK-Dokumentation finden Sie alle weiteren Anweisungen zum Ausführen des Beispiels auf Ihrem Gerät.
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 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.
Problembehandlung bei der Gatewayverbindung
Wenn das nachgeschaltete Gerät zeitweise eine Verbindung mit seinem Gatewaygerät hergestellt hat, führen Sie die folgenden Schritte zur Auflösung aus.
- 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.