Ansluta en underordnad enhet till en Azure IoT Edge-gateway

Gäller för:Bockmarkering för IoT Edge 1.5 IoT Edge 1.5 Bockmarkering för IoT Edge 1.4 IoT Edge 1.4

Viktigt!

IoT Edge 1.5 LTS och IoT Edge 1.4 LTS stöds. IoT Edge 1.4 LTS upphör den 12 november 2024. Om du har en tidigare version läser du Uppdatera IoT Edge.

Här hittar du instruktioner för att upprätta en betrodd anslutning mellan underordnade enheter och transparenta IoT Edge-gatewayer. I ett transparent gatewayscenario kan en eller flera enheter skicka sina meddelanden via en enda gatewayenhet som underhåller anslutningen till IoT Hub. Här refererar termerna gateway och IoT Edge-gateway till en IoT Edge-enhet som konfigurerats som en transparent gateway.

Kommentar

En nedströmsenhet genererar data direkt till Internet eller till gatewayenheter (IoT Edge-aktiverade eller inte). En underordnad enhet kan vara en underordnad enhet eller en gatewayenhet i en kapslad topologi.

Det finns tre allmänna steg för att konfigurera en lyckad transparent gatewayanslutning. Den här artikeln förklarar det tredje steget.

  1. Konfigurera gatewayenheten som en server så att underordnade enheter kan ansluta till den på ett säkert sätt. Konfigurera gatewayen för att ta emot meddelanden från underordnade enheter och dirigera dem till rätt mål. De här stegen finns i Konfigurera en IoT Edge-enhet så att den fungerar som en transparent gateway.

  2. Skapa en enhetsidentitet för den underordnade enheten så att den kan autentiseras med IoT Hub. Konfigurera den underordnade enheten så att den skickar meddelanden via gatewayenheten. De här stegen finns i Autentisera en underordnad enhet till Azure IoT Hub.

  3. Anslut nedströmsenheten till gatewayenheten och börja skicka meddelanden.

Den här artikeln hjälper dig att förstå underordnade enhetsanslutningskomponenter, till exempel:

  • TLS (Transport Layer Security) och certifikatgrunder.
  • TLS-bibliotek som fungerar i olika operativsystem som hanterar certifikat på olika sätt.

Sedan går du igenom Azure IoT-exempel på önskat språk för att få enheten att skicka meddelanden till gatewayen.

Förutsättningar

Hämta följande för att förbereda din underordnade enhet:

Kommentar

IoT-enheter som registrerats med IoT Hub kan använda modultvillingar för att isolera olika processer, maskinvara eller funktioner på en enda enhet. IoT Edge-gatewayer stöder underordnade modulanslutningar med symmetrisk nyckelautentisering men inte X.509-certifikatautentisering.

Förstå grunderna för TLS och certifikat

Utmaningen att på ett säkert sätt ansluta nedströmsenheter till IoT Edge är precis som all annan säker klient-/serverkommunikation 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-konstruktioner (Public Key Infrastructure) som kallas certifikat. TLS är en ganska involverad specifikation och behandlar 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 att du på ett säkert sätt ska kunna ansluta enheter till en IoT Edge-gateway.

När en klient ansluter till en server visar servern en kedja med certifikat, som kallas för servercertifikatkedjan. En certifikatkedja består vanligtvis av ett certifikat för rotcertifikatutfärdare (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 för verifiering av serverkedjan. Klienten utmanar servern att bevisa innehav av den privata nyckeln som är associerad med servercertifikatet i en process som kallas bevis på innehav. Kombinationen av verifiering av serverkedjan och bevis på innehav kallas serverautentisering. För att verifiera en servercertifikatkedja behöver en klient en kopia av rotcertifikatutfärdarcertifikatet som användes för att skapa (eller utfärda) serverns certifikat. Normalt när du ansluter till webbplatser är en webbläsare förkonfigurerad med vanliga CA-certifikat så att klienten har en sömlös process.

När en enhet ansluter till Azure IoT Hub är enheten klienten och IoT Hub-molntjänsten är servern. IoT Hub-molntjänsten backas upp av ett rotcertifikatutfärdarcertifikat som heter Baltimore CyberTrust Root, som är offentligt tillgängligt och används ofta. Eftersom CA-certifikatet för IoT Hub redan är installerat på de flesta enheter använder många TLS-implementeringar (OpenSSL, Schannel, LibreSSL) automatiskt under verifiering av servercertifikat. En enhet som ansluter till IoT Hub kan dock ha problem med att försöka ansluta till en IoT Edge-gateway.

När en enhet ansluter till en IoT Edge-gateway är den underordnade enheten klienten och gatewayenheten är servern. Med 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älvsignerat (eller internt) rotcertifikatutfärdarcertifikat. Offentliga CA-certifikat har ofta en associerad kostnad, så används vanligtvis i produktionsscenarier. Självsignerade CA-certifikat rekommenderas för utveckling och testning. Democertifikaten är självsignerade rotcertifikatutfärdarcertifikat.

När du använder ett självsignerat rotcertifikatutfärdarcertifikat för en IoT Edge-gateway måste det installeras på eller tillhandahållas till alla underordnade enheter som försöker ansluta till gatewayen.

Skärmbild av konfigurationen av gatewaycertifikatet.

Mer information om IoT Edge-certifikat och vissa produktionskonsekvenser finns i information om IoT Edge-certifikatanvändning.

Ange rotcertifikatutfärdarcertifikatet

För att verifiera gatewayenhetens certifikat behöver den underordnade enheten en egen kopia av rotcertifikatutfärdarcertifikatet. Om du använde skripten i 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 flyttar du certifikatfilen till valfri katalog på din underordnade enhet. Du kan flytta filen genom att antingen 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.

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 kontrollerar du att de program som ansluter till gatewayen kan komma åt certifikatet.

Genom att installera rotcertifikatutfärdarcertifikatet 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 i stället använder Node-körningens interna certifikatarkiv. Om du inte kan installera certifikatet på operativsystemnivå går du vidare till Använd certifikat med Azure IoT SDK:er.

Installera rotcertifikatutfärdarcertifikatet på Ubuntu eller Windows.

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 förutsättningarna och att du har kopierat certifikatet till en plats på den underordnade enheten.

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

Du bör se ett meddelande med texten "Uppdaterar certifikat i /etc/ssl/certs... 1 tillagd, 0 borttagen; klar."

Använda certifikat med Azure IoT SDK:er

Azure IoT SDK:er ansluter till en IoT Edge-enhet med enkla exempelprogram. Exempelmålet är att ansluta enhetsklienten och skicka telemetrimeddelanden till gatewayen och sedan stänga anslutningen och avsluta.

Hämta följande objekt innan du använder exemplen på programnivå:

  • Din IoT Hub-anslutningssträng, från din nedströmsenhet, ändrad till att peka på gatewayenheten.

  • Alla certifikat som krävs för att autentisera din underordnade enhet till IoT Hub. Mer information finns i Autentisera en nedströmsenhet till Azure IoT Hub.

  • Den fullständiga sökvägen till rotcertifikatutfärdarcertifikatet som du kopierade och sparade någonstans på din underordnade enhet.

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

Nu är du redo att använda certifikat med ett exempel på valfritt språk:

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å som du ser här. NodeJS-program använder inte systemets certifikatarkiv.

  1. Hämta exemplet för edge_downstream_device.js från Azure IoT-enhetens SDK för Node.js exempel på lagringsplatsen.
  2. Kontrollera att du har alla förutsättningar för att köra exemplet genom att granska readme.md-filen .
  3. I filen edge_downstream_device.js uppdaterar du variablerna connectionString och edge_ca_cert_path .
  4. I SDK-dokumentationen finns instruktioner om hur du kör exemplet på enheten.

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'),
};

Testa gatewayanslutningen

Använd det här exempelkommandot på den underordnade enheten 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 anslutningen via MQTTS (port 8883). Om du använder ett annat protokoll justerar du kommandot efter behov för AMQPS (5671) eller HTTPS (443).

Utdata från det här kommandot 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).

Skärmbild av hur du verifierar en gatewayanslutning.

Felsöka gatewayanslutningen

Om din underordnade enhetsanslutning till dess gatewayenhet är instabil kan du överväga dessa frågor för en lösning.

  • Är gatewayens värdnamn i anslutningssträng samma som värdnamnsvärdet i IoT Edge-konfigurationsfilen på gatewayenheten?
  • Kan gatewayens värdnamn matchas till 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å den underordnade enheten.
  • Är kommunikationsportarna öppna i brandväggen? Kommunikation baserad 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 hur IoT Edge kan utöka offlinefunktioner till underordnade enheter.