Een downstreamapparaat verbinden met een Azure IoT Edge-gateway
Van toepassing op:
IoT Edge 1,1
IOT Edge 1,2
Dit artikel bevat instructies voor het tot stand brengen van een vertrouwde verbinding tussen downstreamapparaten en IoT Edge transparante gateways. In een scenario met een transparante gateway kunnen een of meer apparaten hun berichten doorgeven via één gatewayapparaat dat de verbinding met de IoT Hub.
Er zijn drie algemene stappen voor het instellen van een geslaagde transparante gatewayverbinding. In dit artikel wordt de derde stap beschreven:
- Configureer het gatewayapparaat als een server zodat downstreamapparaten er veilig verbinding mee kunnen maken. Stel de gateway in voor het ontvangen van berichten van downstreamapparaten en routeer deze naar de juiste bestemming. Zie Configure an IoT Edge device to act as a transparent gateway (Eentransparant gateway configureren) voor deze stappen.
- Maak een apparaat-id voor het downstreamapparaat zodat het kan worden geverifieerd met IoT Hub. Configureer het downstreamapparaat voor het verzenden van berichten via het gatewayapparaat. Zie Een downstreamapparaat verifiëren voormeer Azure IoT Hub.
- Verbinding maken downstreamapparaat naar het gatewayapparaat en begin met het verzenden van berichten.
In dit artikel worden basisconcepten voor downstreamapparaatverbindingen besproken en wordt u begeleid bij het instellen van uw downstreamapparaten door:
- De basisprincipes van Transport Layer Security (TLS) en certificaten uitleggen.
- Uitleg over hoe TLS-bibliotheken werken in verschillende besturingssystemen en hoe elk besturingssysteem omgaat met certificaten.
- Door azure IoT-voorbeelden lopen in verschillende talen om u op weg te helpen.
In dit artikel verwijzen de termen gateway en IoT Edge gateway naar een IoT Edge die is geconfigureerd als een transparante gateway.
Vereisten
- U moet het basis-CA-certificaatbestand hebben dat is gebruikt voor het genereren van het CA-certificaat van het apparaat in Een IoT Edge-apparaat configureren om te fungeren als een transparante gateway die beschikbaar is op uw downstreamapparaat. Uw downstreamapparaat gebruikt dit certificaat om de identiteit van het gatewayapparaat te valideren. Als u de democertificaten hebt gebruikt, wordt het basis-CA-certificaat azure-iot-test-only.root.ca.cert.pem genoemd.
- De gewijzigde connection string die naar het gatewayapparaat wijst, zoals wordt uitgelegd in Een downstreamapparaat verifiëren voor Azure IoT Hub.
Een downstreamapparaat voorbereiden
Een downstreamapparaat kan elke toepassing of elk platform zijn met een identiteit die is gemaakt met de Azure IoT Hub cloudservice. In veel gevallen gebruiken deze toepassingen de Azure IoT Device SDK. Een downstreamapparaat kan zelfs een toepassing zijn die wordt uitgevoerd op het IoT Edge gatewayapparaat zelf. Een ander IoT Edge kan echter niet downstream zijn van een IoT Edge gateway.
Een downstreamapparaat kan elke toepassing of elk platform zijn met een identiteit die is gemaakt met de Azure IoT Hub cloudservice. In veel gevallen gebruiken deze toepassingen de Azure IoT Device SDK. Een downstreamapparaat kan zelfs een toepassing zijn die wordt uitgevoerd op het IoT Edge gatewayapparaat zelf.
Dit artikel bevat de stappen voor het verbinden van een IoT-apparaat als downstreamapparaat. Als u een IoT Edge als downstreamapparaat hebt, zie Verbinding maken downstreamapparaat IoT Edge naar een Azure IoT Edge-gateway.
Notitie
IoT-apparaten die zijn geregistreerd bij IoT Hub kunnen module-tweelingen gebruiken om verschillende processen, hardware of functies op één apparaat te isoleren. IoT Edge bieden ondersteuning voor downstreammoduleverbindingen met behulp van verificatie met symmetrische sleutels, maar niet voor X.509-certificaatverificatie.
Als u een downstreamapparaat wilt verbinden met IoT Edge gateway, hebt u twee dingen nodig:
Een apparaat of toepassing die is geconfigureerd met een IoT Hub apparaat connection string toegevoegd met informatie om het apparaat te verbinden met de gateway.
Deze stap is voltooid in het vorige artikel Verificatie van een downstreamapparaat voor Azure IoT Hub.
Het apparaat of de toepassing moet het basis-CA-certificaat van de gateway vertrouwen om de TLS-verbindingen (Transport Layer Security) met het gatewayapparaat te valideren.
Deze stap wordt uitgebreid beschreven in de rest van dit artikel. Deze stap kan op twee manieren worden uitgevoerd: door het CA-certificaat te installeren in het certificaatopslag van het besturingssysteem of (voor bepaalde talen) door te verwijzen naar het certificaat binnen toepassingen met behulp van de Azure IoT-SDK's.
Basisprincipes van TLS en certificaten
De uitdaging van het veilig verbinden van downstreamapparaten met IoT Edge is net als andere beveiligde client-/servercommunicatie die plaatsvindt via internet. Een client en een server communiceren veilig via internet met behulp van Transport Layer Security (TLS). TLS is gebouwd met behulp van standaard PKI-constructies (Public Key Infrastructure) die certificaten worden genoemd. TLS is een redelijk betrokken specificatie en behandelt een breed scala aan onderwerpen met betrekking tot het beveiligen van twee eindpunten. In deze sectie vindt u een overzicht van de concepten die relevant zijn voor het veilig verbinden van apparaten met IoT Edge gateway.
Wanneer een client verbinding maakt met een server, presenteert de server een keten van certificaten, die de certificaatketen van de server worden genoemd. Een certificaatketen omvat doorgaans een basiscertificaat van een certificeringsinstantie (CA), een of meer tussenliggende CA-certificaten en ten slotte het certificaat van de server zelf. Een client brengt een vertrouwensrelatie met een server tot leven door de hele certificaatketen van de server cryptografisch te verifiëren. Deze clientvalidatie van de servercertificaatketen wordt serverketenvalidatie genoemd. De client ermee in op de server om het bezit te bewijzen van de persoonlijke sleutel die is gekoppeld aan het servercertificaat in een proces dat proof of possession wordt genoemd. De combinatie van serverketenvalidatie en bewijs van eigendom wordt serververificatie genoemd. Voor het valideren van een servercertificaatketen heeft een client een kopie nodig van het basis-CA-certificaat dat is gebruikt voor het maken (of uitgeven) van het certificaat van de server. Normaal gesproken wordt een browser bij het verbinden met websites vooraf geconfigureerd met veelgebruikte CA-certificaten, zodat de client een naadloos proces heeft.
Wanneer een apparaat verbinding maakt met Azure IoT Hub, is het apparaat de client en de IoT Hub cloudservice de server. De IoT Hub cloudservice wordt mogelijk gemaakt door een basis-CA-certificaat met de naam Baltimore CyberTrust Root, dat openbaar beschikbaar en veel wordt gebruikt. Omdat het IoT Hub CA-certificaat al is geïnstalleerd op de meeste apparaten, gebruiken veel TLS-implementaties (OpenSSL, Schannel, LibreSSL) dit automatisch tijdens de validatie van servercertificaten. Een apparaat dat verbinding maakt met een IoT Hub mogelijk problemen bij het verbinding maken met een IoT Edge gateway.
Wanneer een apparaat verbinding maakt met IoT Edge gateway, is het downstreamapparaat de client en is het gatewayapparaat de server. Azure IoT Edge kunt u naar eigen goedheid gatewaycertificaatketens bouwen. U kunt ervoor kiezen om een openbaar CA-certificaat, zoals Baltimore, te gebruiken of een zelf-ondertekend (of in-house) basis-CA-certificaat te gebruiken. Aan openbare CA-certificaten zijn vaak kosten verbonden, dus worden ze meestal gebruikt in productiescenario's. Zelf-ondertekende CA-certificaten hebben de voorkeur voor ontwikkeling en testen. Als u de democertificaten gebruikt, zijn dit zelf-ondertekende basis-CA-certificaten.
Wanneer u een zelf-ondertekend basis-CA-certificaat gebruikt voor een IoT Edge-gateway, moet het worden geïnstalleerd op of worden verstrekt aan alle downstreamapparaten die verbinding proberen te maken met de gateway.

Zie voor meer informatie over IoT Edge certificaten en enkele productie-implicaties IoT Edge gebruiksdetails van het certificaat.
Geef het basis-CA-certificaat op
Om de certificaten van het gatewayapparaat te controleren, heeft het downstreamapparaat een eigen kopie van het basis-CA-certificaat nodig. Als u de scripts in de git IoT Edge-opslagplaats van IoT Edge hebt gebruikt om testcertificaten te maken, wordt het basis-CA-certificaat azure-iot-test-only.root.ca.cert.pem genoemd. Als u dit nog niet hebt gedaan als onderdeel van de andere downstreamapparaatvoorbereidingsstappen, verplaatst u dit certificaatbestand naar een map op uw downstreamapparaat. U kunt een service zoals Azure Key Vault of een functie zoals secure copy protocol gebruiken om het certificaatbestand te verplaatsen.
Certificaten installeren in het besturingssysteem
Zodra het basis-CA-certificaat zich op het downstreamapparaat heeft, moet u ervoor zorgen dat de toepassingen die verbinding maken met de gateway toegang hebben tot het certificaat.
Als u het basis-CA-certificaat installeert in het certificaatopslag van het besturingssysteem, kunnen de meeste toepassingen over het algemeen het basis-CA-certificaat gebruiken. Er zijn enkele uitzonderingen, zoals NodeJS-toepassingen die niet gebruikmaken van het certificaatopslag van het besturingssysteem, maar het interne certificaatopslag van de Node-runtime gebruiken. Als u het certificaat niet op het niveau van het besturingssysteem kunt installeren, gaat u verder met Certificaten gebruiken met Azure IoT-SDK's.
Ubuntu
De volgende opdrachten zijn een voorbeeld van het installeren van een CA-certificaat op een Ubuntu-host. In dit voorbeeld wordt ervan uit de artikelen over vereisten uitgenomen dat u het certificaat azure-iot-test-only.root.ca.cert.pem gebruikt en dat u het certificaat hebt gekopieerd naar een locatie op het downstreamapparaat.
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
U ziet een bericht met de tekst 'Updating certificates in /etc/ssl/certs... 1 toegevoegd, 0 verwijderd; done.'
Windows
De volgende stappen zijn een voorbeeld van het installeren van een CA-certificaat op een Windows host. In dit voorbeeld wordt ervan uit de artikelen over vereisten uitgenomen dat u het certificaat azure-iot-test-only.root.ca.cert.pem gebruikt en dat u het certificaat hebt gekopieerd naar een locatie op het downstreamapparaat.
U kunt certificaten installeren met behulp van het Import-Certificate van PowerShell als beheerder:
import-certificate <file path>\azure-iot-test-only.root.ca.cert.pem -certstorelocation cert:\LocalMachine\root
U kunt ook certificaten installeren met behulp van het hulpprogramma certlm:
- Zoek in Startmenu computercertificaten beheren en selecteer deze optie. Er wordt een hulpprogramma met de naam certlm geopend.
- Navigeer naar Certificaten - Lokale computer > Vertrouwde basiscertificeringsinstanties.
- Klik met de rechtermuisknop op Certificaten en selecteer Alle taken > Importeren. De wizard voor het importeren van certificaten moet worden starten.
- Volg de stappen zoals omgeleid en importeer het certificaatbestand
<path>/azure-iot-test-only.root.ca.cert.pem. Wanneer dit is voltooid, ziet u het bericht 'Is geïmporteerd'.
U kunt certificaten ook programmatisch installeren met behulp van .NET-API's, zoals wordt weergegeven in het .NET-voorbeeld later in dit artikel.
Normaal gesproken gebruiken toepassingen de Windows geleverde TLS-stack met de naam Schannel om veilig verbinding te maken via TLS. Schannel vereist dat certificaten worden geïnstalleerd in het Windows certificaatopslag voordat u een TLS-verbinding tot stand probeert te brengen.
Certificaten gebruiken met Azure IoT SDK's
In deze sectie wordt beschreven hoe de Azure IoT SDK's verbinding maken met IoT Edge apparaat met behulp van eenvoudige voorbeeldtoepassingen. Het doel van alle voorbeelden is om de apparaatclient te verbinden en telemetrieberichten naar de gateway te verzenden, vervolgens de verbinding te sluiten en af te sluiten.
U moet twee dingen voorbereiden voordat u de voorbeelden op toepassingsniveau gebruikt:
De gegevens van uw downstreamapparaat IoT Hub connection string gewijzigd zodat deze naar het gatewayapparaat wijzen, en alle certificaten die vereist zijn om uw downstreamapparaat te verifiëren voor IoT Hub. Zie Authenticate a downstream device to Azure IoT Hub (Een downstreamapparaat verifiëren voor Azure IoT Hub).
Het volledige pad naar het basis-CA-certificaat dat u hebt gekopieerd en ergens op uw downstreamapparaat hebt opgeslagen.
Bijvoorbeeld
<path>/azure-iot-test-only.root.ca.cert.pem.
Node.js
Deze sectie bevat een voorbeeldtoepassing om een Azure IoT NodeJS-apparaatclient te verbinden met IoT Edge gateway. Voor NodeJS-toepassingen moet u het basis-CA-certificaat installeren op toepassingsniveau, zoals hier wordt weergegeven. NodeJS-toepassingen maken geen gebruik van het certificaatopslag van het systeem.
- Haal het voorbeeld voor edge_downstream_device.js op uit de Azure IoT Device SDK voor Node.js-voorbeelden.
- Zorg ervoor dat u alle vereisten hebt om het voorbeeld uit te voeren door het readme.md controleren.
- Werk in edge_downstream_device.js bestand connectionString bij en edge_ca_cert_path variabelen.
- Raadpleeg de SDK-documentatie voor instructies over het uitvoeren van het voorbeeld op uw apparaat.
Om inzicht te krijgen in het voorbeeld dat u gebruikt, is het volgende codefragment de manier waarop de client-SDK het certificaatbestand leest en gebruikt om een beveiligde TLS-verbinding tot stand te brengen:
// 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
In deze sectie maakt u kennis met een voorbeeldtoepassing om een Azure IoT .NET-apparaatclient te verbinden met IoT Edge gateway. .NET-toepassingen kunnen echter automatisch alle geïnstalleerde certificaten in het certificaatopslag van het systeem gebruiken op linux- en Windows hosts.
- Haal het voorbeeld voor EdgeDownstreamDevice op uit de map IoT Edge .NET-voorbeelden.
- Zorg ervoor dat u alle vereisten hebt om het voorbeeld uit te voeren door het readme.md controleren.
- Werk in het bestand Properties/launchSettings.json de DEVICE_CONNECTION_STRING en CA_CERTIFICATE_PATH bij. Als u het certificaat wilt gebruiken dat is geïnstalleerd in het vertrouwde certificaatopslag op het hostsysteem, laat u deze variabele leeg.
- Raadpleeg de SDK-documentatie voor instructies over het uitvoeren van het voorbeeld op uw apparaat.
Als u programmatisch een vertrouwd certificaat wilt installeren in het certificaatopslag via een .NET-toepassing, raadpleegt u de functie InstallCACert() in het bestand EdgeDownstreamDevice/Program.cs. Deze bewerking is idempotent, dus kan meerdere keren worden uitgevoerd met dezelfde waarden zonder extra effect.
C
In deze sectie maakt u kennis met een voorbeeldtoepassing om een Azure IoT C-apparaatclient te verbinden met IoT Edge gateway. De C-SDK kan worden gebruikt met veel TLS-bibliotheken, waaronder OpenSSL,Ssl en Schannel. Zie de Azure IoT C SDK voor meer informatie.
- Haal de iotedge_downstream_device_sample op uit de Azure IoT Device SDK voor C-voorbeelden.
- Zorg ervoor dat u alle vereisten hebt om het voorbeeld uit te voeren door het readme.md controleren.
- Werk in iotedge_downstream_device_sample.c-bestand de connectionString bij en edge_ca_cert_path variabelen.
- Raadpleeg de SDK-documentatie voor instructies over het uitvoeren van het voorbeeld op uw apparaat.
De Apparaat-SDK van Azure IoT voor C biedt een optie om een CA-certificaat te registreren bij het instellen van de client. Met deze bewerking wordt het certificaat nergens geïnstalleerd, maar wordt een tekenreeksindeling van het certificaat in het geheugen gebruikt. Het opgeslagen certificaat wordt aan de onderliggende TLS-stack geleverd bij het tot stand brengen van een verbinding.
(void)IoTHubDeviceClient_SetOption(device_handle, OPTION_TRUSTED_CERT, cert_string);
Notitie
De methode voor het registreren van een CA-certificaat bij het instellen van de client kan veranderen als u een beheerd pakket of een beheerde bibliotheek gebruikt. De op Arduino IDE gebaseerde bibliotheek vereist bijvoorbeeld dat het CA-certificaat wordt toegevoegd aan een matrix met certificaten die is gedefinieerd in een globaal bestand certs.c, in plaats van de bewerking te IoTHubDeviceClient_LL_SetOption gebruiken.
Als Windows hosts openSSL of een andere TLS-bibliotheek gebruikt, gebruikt de SDK standaard Schannel. Schannel werkt alleen als het IoT Edge ca-basiscertificaat wordt geïnstalleerd in het Windows-certificaatopslag, niet met behulp van de IoTHubDeviceClient_SetOption bewerking.
Java
In deze sectie maakt u kennis met een voorbeeldtoepassing om een Azure IoT Java-apparaatclient te verbinden met IoT Edge gateway.
- Haal het voorbeeld voor Send-event op uit de Azure IoT Device SDK voor Java-voorbeelden.
- Zorg ervoor dat u alle vereisten hebt om het voorbeeld uit te voeren door het readme.md controleren.
- Raadpleeg de SDK-documentatie voor instructies over het uitvoeren van het voorbeeld op uw apparaat.
Python
In deze sectie maakt u kennis met een voorbeeldtoepassing om een Azure IoT Python-apparaatclient te verbinden met IoT Edge gateway.
- Haal het voorbeeld voor send_message_downstream op uit de Azure IoT Device SDK voor Python-voorbeelden.
- Stel de
IOTHUB_DEVICE_CONNECTION_STRINGIOTEDGE_ROOT_CA_CERT_PATHomgevingsvariabelen en in zoals opgegeven in de Opmerkingen bij Python-scripts. - Raadpleeg de SDK-documentatie voor aanvullende instructies over het uitvoeren van het voorbeeld op uw apparaat.
De gatewayverbinding testen
Gebruik deze voorbeeldopdracht op het downstreamapparaat om te testen of het verbinding kan maken met het gatewayapparaat:
openssl s_client -connect mygateway.contoso.com:8883 -CAfile <CERTDIR>/certs/azure-iot-test-only.root.ca.cert.pem -showcerts
Met deze opdracht worden verbindingen via MQTTS (poort 8883) getest. Als u een ander protocol gebruikt, past u de opdracht zo nodig aan voor AMQPS (5671) of HTTPS (433)
De uitvoer van deze opdracht kan lang zijn, inclusief informatie over alle certificaten in de keten. Als de verbinding tot stand is brengen, ziet u een regel zoals Verification: OK of Verify return code: 0 (ok) .

Problemen met de gatewayverbinding oplossen
Als uw leaf-apparaat af en toe verbinding heeft met het gatewayapparaat, probeert u de volgende stappen voor oplossing.
- Is de hostnaam van de gateway in de connection string hetzelfde als de hostnaamwaarde in het IoT Edge-configuratiebestand op het gatewayapparaat?
- Kan de hostnaam van de gateway worden opgelost in een IP-adres? U kunt onregelmatige verbindingen oplossen met behulp van DNS of door een hostbestandsinvoer toe te voegen op het leaf-apparaat.
- Zijn communicatiepoorten geopend in uw firewall? Communicatie op basis van het gebruikte protocol (MQTTS:8883/AMQPS:5671/HTTPS:433) moet mogelijk zijn tussen het downstreamapparaat en de transparante IoT Edge.
Volgende stappen
Meer informatie IoT Edge offlinemogelijkheden kunt uitbreiden naar downstreamapparaten.