Dela via


Ansluta en underordnad enhet till en Azure IoT Edge-gateway

gäller för:ja-ikonen IoT Edge 1.1

Viktigt!

IoT Edge 1.1 supportdatumet upphör var den 13 december 2022. I informationen om Microsoft-produktens livscykel hittar du fler uppgifter om vilken support som gäller för denna produkt, tjänst, teknik eller detta API. Mer information om hur du uppdaterar till den senaste versionen av IoT Edge finns i Uppdatera IoT Edge-.

Den här artikeln innehåller 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.

Det finns tre allmänna steg för att konfigurera en lyckad transparent gatewayanslutning. Den här artikeln beskriver 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 den underordnade enheten till gatewayenheten och börja skicka meddelanden.

Den här artikeln beskriver grundläggande begrepp för nedströms enhetsanslutningar och hjälper dig att konfigurera dina underordnade enheter genom att:

  • Förklara grunderna för transportskiktssäkerhet (TLS) och certifikat.
  • Förklara hur TLS-bibliotek fungerar i olika operativsystem och hur varje operativsystem hanterar certifikat.
  • Gå igenom Azure IoT-exempel på flera språk för att hjälpa dig att komma igång.

I den här artikeln refererar termerna gateway och IoT Edge-gateway till en IoT Edge-enhet som konfigurerats som en transparent gateway.

Anmärkning

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

Förutsättningar

Förbereda en nedströms enhet

En underordnad enhet kan vara alla program eller plattformar som har en identitet som skapats med Azure IoT Hub-molntjänsten. I många fall använder dessa program Azure IoT-enhets-SDK. En nedströmsenhet kan till och med vara ett program som körs på själva IoT Edge-gatewayenheten. En annan IoT Edge-enhet kan dock inte vara nedströms till en IoT Edge-gateway.

Anmärkning

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.

Om du vill ansluta en nedströmsenhet till en IoT Edge-gateway behöver du två saker:

  • En enhet eller ett program som har konfigurerats med en IoT Hub-enhet anslutningssträng bifogad med information för att ansluta den till gatewayen.

    Det här steget slutfördes i föregående artikel Autentisera en nedströmsenhet till Azure IoT Hub.

  • Enheten eller programmet måste lita på gatewayens rotcertifikat för att validera 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å ett av 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 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 byggs med standardkonstruktioner för publik nyckelinfrastruktur (PKI) 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 servercertifikatkedjevalidering. 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 validera en servercertifikatkedja behöver en klient en kopia av rot-CA-certifikatet som användes för att utfärda (eller skapa) 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 stöds av ett rotcertifikat som heter Baltimore CyberTrust Root, vilket ä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 på det sätt som passar dig bäst. Du kan välja att använda ett offentligt CA-certifikat, till exempel Baltimore, eller använda ett självsignerat (eller internt) rotcertifikat. Offentliga CA-certifikat har ofta en associerad kostnad, så används vanligtvis i produktionsscenarier. Självsignerade CA-certifikat rekommenderas för utveckling och testning. Om du använder democertifikaten är de självsignerade rot-CA-certifikat.

När du använder ett självsignerat rot-CA-certifikat för en IoT Edge-gateway måste det installeras på eller tillhandahållas för alla nedströmsenheter som försöker ansluta till gateway.

Gateway-certifikatkonfiguration

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

Ange rot-CA-certifikatet

För att verifiera gatewayenhetens certifikat behöver den underordnade enheten en egen kopia av rot-CA-certifikatet. Om du använde skripten i IoT Edge git-lagringsplatsen för att skapa testcertifikat så kallas det rot-CA-certifikatet azure-iot-test-only.root.ca.cert.pem. Om du inte redan har gjort det som en del av de andra stegen för att förbereda underordnad enhet flyttar du certifikatfilen till valfri katalog på din underordnade enhet. 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 rotcertifikatet finns på nedströmsenheten måste du se till att programmen som ansluter till gatewayen kan komma åt certifikatet.

Genom att installera rot-certifikatet i operativsystemets certifikatarkiv kan de flesta program vanligtvis använda rot-certifikatet. 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.

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

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 ett meddelande med texten "Uppdaterar certifikat i /etc/ssl/certs... 1 tillagd, 0 borttagen; 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 förutsättningsartiklarna och att du har kopierat certifikatet till en lagringsplats på den underordnade enheten.

Du kan installera certifikat med PowerShells importcertifikat 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 :

  1. I Start-menyn söker du efter och väljer Hantera datorcertifikat. Ett verktyg med namnet certlm öppnas.
  2. Gå till Certifikat - Lokala datorer>Betrodda rotcertifikatutfärdare.
  3. Högerklicka på Certifikat och välj . Guiden för certifikatimport bör lanseras.
  4. 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 "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.

Vanligtvis använder program den Windows-tillhandahållna TLS-stacken Schannel för att ansluta säkert via TLS. Schannel-kräver att alla certifikat installeras i Windows-certifikatarkivet 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 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 IoT Hub-anslutningssträng har ändrats så att den pekar på gatewayenheten och eventuella 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 rot-CA-certifikatet som du kopierade och sparade någonstans på din nedströmsenhet.

    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-applikationer måste du installera rot-CA-certifikatet på applikationsnivå enligt illustrationen. NodeJS-program använder inte systemets certifikatarkiv.

  1. Hämta exemplet för edge_downstream_device.js från Azure IoT-device-SDK:t för Node.js samples-repo.
  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'),
};

.NÄT

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.

  1. Hämta exemplet för EdgeDownstreamDevice från mappen IoT Edge .NET-exempel.
  2. Kontrollera att du har alla förutsättningar för att köra exemplet genom att granska readme.md-filen .
  3. I filen Egenskaper/launchSettings.json uppdaterar du variablerna DEVICE_CONNECTION_STRING och CA_CERTIFICATE_PATH. Om du vill använda certifikatet som är installerat i det betrodda certifikatarkivet i värdsystemet lämnar du variabeln tom.
  4. I SDK-dokumentationen finns instruktioner om hur du kör exemplet på enheten.

Om du programmatiskt vill installera ett betrott certifikat i certifikatarkivet via ett .NET-program läser du 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.

  1. Hämta iotedge_downstream_device_sample-programmet från Azure IoT-enhets-SDK för C-exempel.
  2. Kontrollera att du har alla förutsättningar för att köra exemplet genom att granska readme.md-filen .
  3. Uppdatera variablerna connectionString och edge_ca_cert_path i filen iotedge_downstream_device_sample.c.
  4. I SDK-dokumentationen finns instruktioner om hur du kör exemplet på enheten.

Azure IoT-enhetens SDK 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 du upprättar en anslutning.

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

Anmärkning

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 åtgärden IoTHubDeviceClient_LL_SetOption .

Om du inte använder OpenSSL eller ett annat TLS-bibliotek på Windows-system använder SDK:t som standard Schannel. För att Schannel ska fungera, ska IoT Edge-rot-CA-certifikatet installeras i Windows-certifikatarkivet och inte ställas in med hjälp av operationen IoTHubDeviceClient_SetOption.

Java

Det här avsnittet introducerar ett exempelprogram för att ansluta en Azure IoT Java-enhetsklient till en IoT Edge-gateway.

  1. Hämta exemplet för Send-event från Azure IoT-enhetens SDK för Java-exempel.
  2. Kontrollera att du har alla förutsättningar för att köra exemplet genom att granska readme.md-filen .
  3. I SDK-dokumentationen finns instruktioner om hur du kör exemplet på enheten.

python

I det här avsnittet introduceras ett exempelprogram för att ansluta en Azure IoT Python-enhetsklient till en IoT Edge-gateway.

  1. Hämta exemplet för send_message_downstream från Azure IoT-enhetens SDK för Python-exempel.
  2. IOTHUB_DEVICE_CONNECTION_STRING Ange miljövariablerna och IOTEDGE_ROOT_CA_CERT_PATH enligt vad som anges i Python-skriptkommentarna.
  3. Mer information om hur du kör exemplet på enheten finns i SDK-dokumentationen.

Testa gateway-anslutningen

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 anslutningar 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).

Verifiera gateway-anslutning

Felsöka gateway-anslutningen

Om din underordnade enhet har en tillfällig anslutning till sin gatewayenhet kan du prova följande steg för lösning.

  1. Är gatewayens värdnamn i anslutningssträng samma som värdnamnsvärdet i IoT Edge-konfigurationsfilen på gatewayenheten?
  2. 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.
  3. Ä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.