Ansluta en underordnad enhet till en Azure IoT Edge-gateway
Gäller för:
IoT Edge 1,1
IoT Edge 1,2
Den här artikeln innehåller instruktioner för att upprätta en betrodd anslutning mellan nedströmsenheter och IoT Edge transparenta gatewayer. I ett scenario med transparent gateway kan en eller flera enheter skicka sina meddelanden via en enda gatewayenhet som upprätthåller anslutningen till IoT Hub.
Det finns tre allmänna steg för att konfigurera en lyckad transparent gatewayanslutning. Den här artikeln beskriver det tredje steget:
- Konfigurera gatewayenheten som en server så att nedströmsenheter kan ansluta till den på ett säkert sätt. Konfigurera gatewayen för att ta emot meddelanden från nedströmsenheter och dirigera dem till rätt mål. Dessa steg finns i Konfigurera en IoT Edge som fungerar som en transparent gateway.
- Skapa en enhetsidentitet för nedströmsenheten så att den kan autentisera med IoT Hub. Konfigurera nedströmsenheten så att den skickar meddelanden via gatewayenheten. Dessa steg finns i Autentisera en nedströmsenhet för att Azure IoT Hub.
- Anslut nedströmsenheten till gatewayenheten och börja skicka meddelanden.
Den här artikeln beskriver grundläggande begrepp för nedströmsenhetsanslutningar och hjälper dig att konfigurera nedströmsenheter genom att:
- Förklara grunderna i säkerhet på transportlager (TLS) och certifikat.
- Förklarar hur TLS-bibliotek fungerar i olika operativsystem och hur varje operativsystem hanterar certifikat.
- Att gå igenom Azure IoT-exempel på flera språk för att komma igång.
I den här artikeln refererar termerna gateway IoT Edge gateway till en IoT Edge som konfigurerats som en transparent gateway.
Förutsättningar
- Ha rotcertifikatutfärdarcertifikatfilen som användes för att generera CA-certifikatet för enheten i Konfigurera en IoT Edge-enhet att fungera som en transparent gateway som är tillgänglig på den underordnade enheten. Den underordnade enheten använder det här certifikatet för att verifiera gatewayenhetens identitet. Om du använde democertifikaten kallas rotcertifikatutfärdarcertifikatet azure-iot-test-only.root.ca.cert.pem.
- Ha den ändrade anslutningssträngen som pekar på gatewayenheten enligt förklaringen i Autentisera en underordnad enhet för att Azure IoT Hub.
Förbereda en underordnad enhet
En underordnad enhet kan vara ett program eller en plattform som har en identitet som skapats med Azure IoT Hub molntjänst. I många fall använder dessa program SDK för Azure IoT-enheter. En underordnad enhet kan till och med vara ett program som körs IoT Edge själva gatewayenheten. En annan IoT Edge enhet kan dock inte vara underordnad en IoT Edge gateway.
En underordnad enhet kan vara ett program eller en plattform som har en identitet som skapats med Azure IoT Hub molntjänst. I många fall använder dessa program SDK för Azure IoT-enheter. En underordnad enhet kan till och med vara ett program som körs IoT Edge själva gatewayenheten.
Den här artikeln innehåller anvisningar för att ansluta en IoT-enhet som en underordnad enhet. Om du har en IoT Edge enhet som nedströmsenhet kan du Anslut nedströmsenhet IoT Edge nedströmsenhet till en Azure IoT Edge gateway.
Anteckning
IoT-enheter som IoT Hub med hjälp av modultvillingarna kan isolera olika processer, maskinvara eller funktioner på en enda enhet. IoT Edge stöder underordnade modulanslutningar med hjälp av autentisering med symmetrisk nyckel, men inte X.509-certifikatautentisering.
Om du vill ansluta en underordnad enhet IoT Edge en gateway behöver du två saker:
En enhet eller ett program som har konfigurerats med IoT Hub enhetsanslutningssträng med information för att ansluta den till gatewayen.
Det här steget slutfördes i föregående artikel Autentisera en nedströmsenhet för att Azure IoT Hub.
Enheten eller programmet måste lita på gatewayens rotcertifikatutfärdarcertifikat för att verifiera TLS-anslutningarna (Transport Layer Security) till gatewayenheten.
Det här steget beskrivs i detalj i resten av den här artikeln. Det här steget kan utföras på två sätt: genom att installera CA-certifikatet i operativsystemets certifikatarkiv eller (för vissa språk) genom att referera till certifikatet i program med hjälp av Azure IoT-SDK:er.
Grunderna i TLS och certifikat
Utmaningen med att på ett säkert sätt ansluta nedströmsenheter till IoT Edge är precis som andra säkra klient-/serverkommunikationer som sker via Internet. En klient och en server kommunicerar säkert via Internet med hjälp av TLS (Transport Layer Security). TLS skapas med PKI-standardkonstruktioner (Public Key Infrastructure) som kallas certifikat. TLS är en ganska involverad specifikation och tar upp en mängd olika ämnen som rör skydd av två slutpunkter. I det här avsnittet sammanfattas de begrepp som är relevanta för säker anslutning av enheter till en IoT Edge gateway.
När en klient ansluter till en server presenterar servern en kedja med certifikat, som kallas servercertifikatkedjan. En certifikatkedja består vanligtvis av ett rotcertifikatutfärdarcertifikat (CA), ett eller flera mellanliggande CA-certifikat och slutligen själva serverns certifikat. En klient upprättar förtroende med en server genom att kryptografiskt verifiera hela servercertifikatkedjan. Den här klientverifieringen av servercertifikatkedjan kallas serverkedjevalidering. Klienten uppmanar servern att bevisa innehavet av den privata nyckel som är associerad med servercertifikatet i en process som kallas innehavarbevis. Kombinationen av serverkedjevalidering och innehavarbevis kallas serverautentisering. För att validera en servercertifikatkedja behöver en klient en kopia av rotcertifikatutfärdarens certifikat som användes för att skapa (eller utfärda) serverns certifikat. När du ansluter till webbplatser är en webbläsare vanligtvis förkonfigurerad med vanliga CA-certifikat så att klienten får en sömlös process.
När en enhet ansluter Azure IoT Hub är enheten klienten och IoT Hub är servern. Molntjänsten IoT Hub backas upp av ett rotcertifikatutfärdarcertifikat som kallas Baltimore CyberTrust Root, som är allmänt tillgängligt och används ofta. Eftersom ca IoT Hub certifikatutfärdarens certifikat redan är installerat på de flesta enheter använder många TLS-implementeringar (OpenSSL, Schannel, LibreSSL) det automatiskt under servercertifikatverifieringen. En enhet som ansluter till en IoT Hub kan dock ha problem med att ansluta till en IoT Edge gateway.
När en enhet ansluter till IoT Edge gateway är den underordnade enheten klienten och gatewayenheten är servern. Azure IoT Edge kan du skapa gatewaycertifikatkedjor, men de passar. Du kan välja att använda ett offentligt CA-certifikat, till exempel Baltimore, eller använda ett själv signerat (eller internt) rotcertifikatutfärdarcertifikat. Offentliga CA-certifikat har ofta en associerad kostnad, så de används vanligtvis i produktionsscenarier. Själv signerade CA-certifikat föredras för utveckling och testning. Om du använder democertifikaten är de själv signerade rotcertifikatutfärdarcertifikat.
När du använder ett själv signerat rotcertifikatutfärdarcertifikat för en IoT Edge-gateway måste det installeras på eller tillhandahållas till alla nedströmsenheter som försöker ansluta till gatewayen.

Mer information om hur IoT Edge certifikat och vissa produktionskonsekvenser finns i IoT Edge information om certifikatanvändning.
Ange rotcertifikatutfärdarcertifikatet
För att verifiera gatewayenhetens certifikat behöver nedströmsenheten en egen kopia av rotcertifikatutfärdarens certifikat. Om du använde skripten som finns på IoT Edge git-lagringsplatsen för att skapa testcertifikat kallas rotcertifikatutfärdarcertifikatet azure-iot-test-only.root.ca.cert.pem. Om du inte redan har gjort det som en del av de andra nedströmsstegen för enhetsförberedelse flyttar du den här certifikatfilen till valfri katalog på den underordnade enheten. Du kan använda en tjänst som Azure Key Vault eller en funktion som Secure copy protocol för att flytta certifikatfilen.
Installera certifikat i operativsystemet
När rotcertifikatutfärdarcertifikatet finns på den underordnade enheten måste du se till att programmen som ansluter till gatewayen kan komma åt certifikatet.
När rotcertifikatutfärdarens certifikat installeras i operativsystemets certifikatarkiv kan de flesta program använda rotcertifikatutfärdarcertifikatet. Det finns vissa undantag, till exempel NodeJS-program som inte använder OS-certifikatarkivet utan istället använder Node Runtimes interna certifikatarkiv. Om du inte kan installera certifikatet på operativsystemnivå kan du gå vidare till Använda certifikat med Azure IoT-SDK:er.
Ubuntu
Följande kommandon är ett exempel på hur du installerar ett CA-certifikat på en Ubuntu-värd. Det här exemplet förutsätter att du använder certifikatet azure-iot-test-only.root.ca.cert.pem från de nödvändiga artiklarna och att du har kopierat certifikatet till en plats på nedströmsenheten.
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
Du bör se meddelandet "Uppdaterar certifikat i /etc/ssl/certs... 1 har lagts till, 0 har tagits bort; klar."
Windows
Följande steg är ett exempel på hur du installerar ett CA-certifikat på en Windows värd. Det här exemplet förutsätter att du använder certifikatet azure-iot-test-only.root.ca.cert.pem från de nödvändiga artiklarna och att du har kopierat certifikatet till en plats på nedströmsenheten.
Du kan installera certifikat med PowerShells Import-Certificate som administratör:
import-certificate <file path>\azure-iot-test-only.root.ca.cert.pem -certstorelocation cert:\LocalMachine\root
Du kan också installera certifikat med hjälp av certlm-verktyget:
- I Start-menyn du efter och väljer Hantera datorcertifikat. Ett verktyg med namnet certlm öppnas.
- Gå till Certifikat – Lokal dator > betrodda rotcertifikatutfärdare.
- Högerklicka på Certifikat och välj Alla aktiviteter > Importera. Guiden importera certifikat bör starta.
- Följ stegen enligt anvisningarna och importera certifikatfilen
<path>/azure-iot-test-only.root.ca.cert.pem. När du är klar bör du se meddelandet "Successfully imported" (Har importerats).
Du kan också installera certifikat programmatiskt med hjälp av .NET-API:er, som du ser i .NET-exemplet senare i den här artikeln.
Program använder vanligtvis den Windows TLS-stacken som kallas Schannel för att ansluta säkert via TLS. Schannel kräver att alla certifikat installeras i Windows certifikatarkiv innan du försöker upprätta en TLS-anslutning.
Använda certifikat med Azure IoT-SDK:er
I det här avsnittet beskrivs hur Azure IoT-SDK:er ansluter till en IoT Edge enhet med hjälp av enkla exempelprogram. Målet med alla exempel är att ansluta enhetsklienten och skicka telemetrimeddelanden till gatewayen och sedan stänga anslutningen och avsluta.
Ha två saker klara innan du använder exemplen på programnivå:
Den underordnade enhetens underordnade IoT Hub anslutningssträngen har ändrats så att den pekar på gatewayenheten och eventuella certifikat som krävs för att autentisera den underordnade enheten för att IoT Hub. Mer information finns i Autentisera en nedströmsenhet för att Azure IoT Hub.
Den fullständiga sökvägen till rotcertifikatutfärdaren som du kopierade och sparade någonstans på nedströmsenheten.
Till exempel
<path>/azure-iot-test-only.root.ca.cert.pem.
NodeJS
Det här avsnittet innehåller ett exempelprogram för att ansluta en Azure IoT NodeJS-enhetsklient till en IoT Edge gateway. För NodeJS-program måste du installera rotcertifikatutfärdarcertifikatet på programnivå enligt det som visas här. NodeJS-program använder inte systemets certifikatarkiv.
- Hämta exemplet för att edge_downstream_device.jsAzure IoT-enhets-SDK för lagringsplatsen Node.js exempellagringsplatsen.
- Kontrollera att du har alla förutsättningar för att köra exemplet genom att granska readme.md filen.
- I filen edge_downstream_device.js uppdaterar du connectionString och edge_ca_cert_path variabler.
- Se SDK-dokumentationen för instruktioner om hur du kör exemplet på din enhet.
För att förstå exemplet som du kör är följande kodfragment hur klient-SDK läser certifikatfilen och använder den för att upprätta en säker TLS-anslutning:
// 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
Det här avsnittet introducerar ett exempelprogram för att ansluta en Azure IoT .NET-enhetsklient till en IoT Edge gateway. .NET-program kan dock automatiskt använda alla installerade certifikat i systemets certifikatarkiv på både Linux och Windows värdar.
- Hämta exemplet för EdgeDownstreamDevice från mappen IoT Edge .NET-exempelmappen.
- Kontrollera att du har alla förutsättningar för att köra exemplet genom att granska readme.md filen.
- I filen Properties/launchSettings.json uppdaterar du DEVICE_CONNECTION_STRING och CA_CERTIFICATE_PATH variabler. Om du vill använda certifikatet som är installerat i det betrodda certifikatarkivet på värdsystemet lämnar du den här variabeln tom.
- Se SDK-dokumentationen för instruktioner om hur du kör exemplet på din enhet.
Om du vill installera ett betrott certifikat programmatiskt i certifikatarkivet via ett .NET-program kan du gå till funktionen InstallCACert() i filen EdgeDownstreamDevice/Program.cs. Den här åtgärden är idempotent, så kan köras flera gånger med samma värden utan ytterligare effekt.
C
Det här avsnittet introducerar ett exempelprogram för att ansluta en Azure IoT C-enhetsklient till en IoT Edge gateway. C SDK kan användas med många TLS-bibliotek, inklusive OpenSSL, WolfSSL och Schannel. Mer information finns i Azure IoT C SDK.
- Hämta iotedge_downstream_device_sample från Azure IoT-enhets-SDK för C-exempel.
- Kontrollera att du har alla förutsättningar för att köra exemplet genom att granska readme.md filen.
- I filen iotedge_downstream_device_sample.c uppdaterar du connectionString och edge_ca_cert_path variabler.
- Se SDK-dokumentationen för instruktioner om hur du kör exemplet på din enhet.
Sdk för Azure IoT-enheter för C ger ett alternativ för att registrera ett CA-certifikat när klienten konfigureras. Den här åtgärden installerar inte certifikatet någonstans, utan använder i stället ett strängformat för certifikatet i minnet. Det sparade certifikatet tillhandahålls till den underliggande TLS-stacken när en anslutning upprättas.
(void)IoTHubDeviceClient_SetOption(device_handle, OPTION_TRUSTED_CERT, cert_string);
Anteckning
Metoden för att registrera ett CA-certifikat när klienten konfigureras kan ändras om du använder ett hanterat paket eller bibliotek. Till exempel kräver det Arduino IDE-baserade biblioteket att ca-certifikatet läggs till i en certifikatmatris som definierats i en global certs.c-fil i stället för att använda IoTHubDeviceClient_LL_SetOption åtgärden.
På Windows värdar använder SDK som standard Schannel om du inte använder OpenSSL eller något annat TLS-bibliotek. För att säker kanal ska fungera ska IoT Edge ca-rotcertifikatutfärdarens certifikat installeras i Windows certifikatarkivet och inte anges med IoTHubDeviceClient_SetOption åtgärden .
Java
Det här avsnittet introducerar ett exempelprogram för att ansluta en Azure IoT Java-enhetsklient till en IoT Edge gateway.
- Hämta exemplet för Send-event från Azure IoT-enhetens SDK för Java-exempel.
- Kontrollera att du har alla förutsättningar för att köra exemplet genom att granska readme.md filen.
- Se SDK-dokumentationen för instruktioner om hur du kör exemplet på din enhet.
Python
Det här avsnittet introducerar ett exempelprogram för att ansluta en Azure IoT Python-enhetsklient till en IoT Edge gateway.
- Hämta exemplet för send_message_downstream från Azure IoT-enhets-SDK för Python-exempel.
- Ange
IOTHUB_DEVICE_CONNECTION_STRINGIOTEDGE_ROOT_CA_CERT_PATHmiljövariablerna och enligt vad som anges i Python-skriptkommentarerna. - Ytterligare instruktioner om hur du kör exemplet på din enhet finns i SDK-dokumentationen.
Testa gatewayanslutningen
Använd det här exempelkommandot på nedströmsenheten för att testa att den kan ansluta till gatewayenheten:
openssl s_client -connect mygateway.contoso.com:8883 -CAfile <CERTDIR>/certs/azure-iot-test-only.root.ca.cert.pem -showcerts
Det här kommandot testar anslutningar via MQTTS (port 8883). Om du använder ett annat protokoll justerar du kommandot efter behov för AMQPS (5671) eller HTTPS (433)
Kommandots utdata kan vara långa, inklusive information om alla certifikat i kedjan. Om anslutningen lyckas visas en rad som Verification: OK eller Verify return code: 0 (ok) .

Felsöka gatewayanslutningen
Om lövenheten har en tillfällig anslutning till sin gatewayenhet kan du prova följande steg för lösning.
- Är gatewayens värdnamn i anslutningssträngen samma som värdet för värdnamnet i IoT Edge-konfigurationsfilen på gatewayenheten?
- Går det att matcha gatewayens värdnamn med en IP-adress? Du kan lösa tillfälliga anslutningar antingen med hjälp av DNS eller genom att lägga till en värdfilpost på lövenheten.
- Är kommunikationsportarna öppna i brandväggen? Kommunikation baserat på det protokoll som används (MQTTS:8883/AMQPS:5671/HTTPS:433) måste vara möjlig mellan nedströmsenheten och den transparenta IoT Edge.
Nästa steg
Lär dig IoT Edge kan utöka offlinefunktioner till nedströmsenheter.