Connecter un appareil en aval à une passerelle Azure IoT Edge

S’applique à :Coche IoT Edge 1.4 IoT Edge 1.4

Important

IoT Edge 1.4 est la version prise en charge. Si vous utilisez une version antérieure, consultez l’article Mettre à jour IoT Edge.

Vous trouverez ici des instructions pour établir une connexion approuvée entre les appareils en aval et les passerelles transparentes IoT Edge. Dans un scénario de passerelle transparente, un ou plusieurs appareils peuvent transmettre leurs messages via un appareil de passerelle qui gère la connexion à IoT Hub. Ici, les termes passerelle et passerelle IoT Edge font référence à un appareil IoT Edge configuré comme passerelle transparente.

Remarque

Un appareil en aval émet des données directement vers Internet ou vers des appareils de passerelle (IoT Edge activés ou non). Un appareil enfant peut être un appareil en aval ou un appareil de passerelle dans une topologie imbriquée.

La configuration d’une connexion de passerelle transparente s’effectue en trois grandes étapes. Cet article explique la troisième étape.

  1. Configurez l’appareil de passerelle en tant que serveur pour permettre aux appareils en aval de s’y connecter en toute sécurité. Configurez la passerelle pour recevoir des messages des appareils en aval et les acheminer vers la destination qui convient. Ces étapes sont décrites dans Configurer un appareil IoT Edge en tant que passerelle transparente.

  2. Créez une identité d’appareil pour l’appareil en aval afin qu’il puisse s’authentifier sur IoT Hub. Configurez l’appareil en aval pour envoyer des messages par le biais de l’appareil de passerelle. Ces étapes sont décrites dans Authentifier un appareil en aval auprès d'Azure IoT Hub.

  3. Connectez l’appareil en aval à l’appareil de passerelle et commencez à envoyer des messages.

Cet article vous aide à comprendre les composants de connexion d’appareil en aval, tels que :

  • Protocole TLS (Transport Layer Security) et principes de base des certificats.
  • Bibliothèques TLS fonctionnant sur différents systèmes d’exploitation qui gèrent les certificats différemment.

Vous parcourez ensuite les échantillons Azure IoT, dans la langue de votre choix, pour permettre à votre appareil d’envoyer des messages à la passerelle.

Prérequis

Acquérir les éléments suivants pour préparer votre appareil en aval :

Remarque

Les appareils IoT inscrits auprès d'IoT Hub peuvent utiliser des jumeaux de module pour isoler des processus, matériels ou fonctions différents sur un même appareil. Les passerelles IoT Edge prennent en charge les connexions de modules en aval à l’aide de l’authentification par clé symétrique, mais pas à l’aide de l’authentification par certificat X.509.

Comprendre les principes de base du protocole TLS et des certificats

Le défi qu’impose la connexion en toute sécurité d’appareils en aval à IoT Edge est le même que pour toute autre communication client/serveur sécurisé survenant sur Internet. Un client et un serveur de communiquent en toute sécurité sur Internet à l’aide du protocole Transport layer security (TLS). Le protocole TLS est généré à l’aide de constructions Public key infrastructure (PKI) standard appelées certificats. TLS est une spécification souvent utilisée, qui convient à de nombreuses situations impliquant la sécurisation de deux points de terminaison. Cette section explique comment connecter des appareils à une passerelle IoT Edge de façon sécurisée.

Lorsqu’un client se connecte à un serveur, le serveur présente une chaîne de certificats, appelée chaîne de certificats du serveur. Une chaîne de certificats comprend généralement un certificat d’autorité de certification racine, un ou plusieurs certificats d’autorité de certification intermédiaires, et enfin le certificat du serveur lui-même. Un client établit une relation de confiance avec un serveur en vérifiant par chiffrement l’intégralité de la chaîne de certificats du serveur. Cette validation côté client de la chaîne de certificat du serveur est appelée validation de la chaîne du serveur. Le client vérifie que le service possède la clé privée associée au certificat du serveur, dans le cadre d’un processus appelé preuve de possession. La combinaison d’une validation de chaîne de serveur et d’une preuve de possession est appelée authentification du serveur. Pour valider une chaîne de certificats du serveur, un client a besoin d’une copie du certificat de l’autorité de certification racine qui a servi à créer (ou à émettre) le certificat du serveur. Normalement, lors de la connexion à des sites web, un navigateur est préconfiguré avec des certificats d’autorité de certification couramment utilisés afin de garantir au client un processus transparent.

Lorsqu’un appareil se connecte à Azure IoT Hub, l’appareil est client et le service cloud IoT Hub est le serveur. Le service cloud IoT Hub s’appuie sur un certificat d’autorité de certification racine appelé Baltimore CyberTrust Root, disponible publiquement et largement utilisé. Comme le certificat d’autorité de certification IoT Hub est déjà installé sur la plupart des appareils, de nombreuses implémentations TLS (OpenSSL, Schannel, LibreSSL) l’utilisent automatiquement lors de la validation du certificat du serveur. Cela étant, un appareil qui se connecte avec succès à IoT Hub peut rencontrer des problèmes en tentant de se connecter à une passerelle IoT Edge.

Lorsqu’un appareil se connecte à une passerelle IoT Edge, l’appareil en aval est le client et l’appareil de passerelle est le serveur. Azure IoT Edge vous permet de générer des chaînes de certificats de passerelle adaptées à vos besoins. Vous pouvez choisir d'utiliser un certificat d'autorité de certification publique, comme Baltimore, ou un certificat d'autorité de certification racine auto-signé (ou développé en interne). Les certificats d’autorité de certification publique entraînent souvent un coût et sont par conséquent généralement utilisés dans des scénarios de production. Les certificats d’autorité de certification auto-signés sont plus adaptés au développement et aux tests. Les certificats de démonstration sont des certificats d’autorité de certification racine auto-signés.

Lorsque vous utilisez un certificat d’autorité de certification racine auto-signé pour une passerelle IoT Edge, ce certificat doit être installé sur tous les appareils en aval qui tentent de se connecter à la passerelle.

Capture d’écran de la configuration du certificat de passerelle.

Pour en savoir plus sur les certificats IoT Edge et certaines implications en matière de production, consultez la section Détails sur l’utilisation d’un certificat IoT Edge.

Fournir le certificat d’autorité de certification racine

Pour vérifier les certificats de l’appareil de passerelle, l’appareil en aval a besoin de sa propre copie du certificat d’autorité de certification racine. Si vous avez utilisé les scripts fournis dans le dépôt Git IoT Edge pour créer des certificats de test, le certificat d’autorité de certification racine est appelé azure-iot-test-only.root.ca.cert.pem.

Si ce n’est déjà fait, déplacez ce fichier de certificat vers n’importe quel répertoire sur votre appareil en aval. Vous pouvez déplacer le fichier en installant le certificat de l’autorité de certification dans le magasin de certificats du système d’exploitation, ou (pour certains langages) en référençant le certificat au sein des applications à l’aide des SDK Azure IoT.

Vous pouvez utiliser un service comme Azure Key Vault ou une fonction comme SCP (Secure Copy Protocol) pour déplacer le fichier de certificat.

Installer des certificats sur le système d’exploitation

Une fois que le certificat d’autorité de certification racine se trouve sur l’appareil en aval, vérifiez que les applications qui se connectent à la passerelle ont accès au certificat.

L’installation du certificat d’autorité de certification racine dans le magasin de certificats du système d’exploitation permet généralement à la plupart des applications d’utiliser le certificat d’autorité de certification racine. Il existe quelques exceptions, notamment les applications NodeJS, qui n’utilisent pas le magasin de certificats du système d’exploitation, mais plutôt le magasin de certificats interne du runtime Node. Si vous ne pouvez pas installer le certificat au niveau du système d’exploitation, passez directement à Utiliser des certificats avec les kits de développement logiciel Azure IoT.

/Installez le certificat d’autorité de certification racine sur Ubuntu ou Windows.

Les commandes suivantes montrent un exemple d’installation d’un certificat d’autorité de certification sur un hôte Ubuntu. Cet exemple suppose que vous utilisez le certificat azure-iot-test-only.root.ca.cert.pem tiré des articles sur les prérequis et que vous avez copié le certificat dans un emplacement de l’appareil en aval.

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

Vous devez voir un message indiquant « Updating certificates in /etc/ssl/certs... 1 added, 0 removed; done. » (Mise à jour des certificats dans /etc/ssl/certs... 1 ajouté, 0 supprimé ; terminé.)

Utiliser des certificats avec les kits de développement logiciel Azure IoT

Kits Azure IoT SDK se connectent à un appareil IoT Edge à l’aide de simples exemples d’applications. L’objectif des échantillons est de se connecter au client de l’appareil et à envoyer des messages de télémétrie à la passerelle, avant de fermer la connexion et de quitter le programme.

Avant d’utiliser les échantillons au niveau de l’application, il faut se procurer les éléments suivants :

  • La chaîne de connexion de votre IoT Hub, provenant de votre appareil en aval, a été modifiée pour pointer vers l’appareil passerelle.

  • Tous les certificats requis pour authentifier votre appareil en aval auprès d’IoT Hub. Pour plus d’informations, consultez Authentifier un appareil en aval auprès d’Azure IoT Hub.

  • Le chemin complet vers le certificat d’autorité de certification racine que vous avez copié et enregistré quelque part sur votre appareil en aval.

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

Vous êtes maintenant prêt(e) à utiliser des certificats avec un échantillon dans la langue de votre choix :

Cette section fournit un exemple d’application pour se connecter d’un client d’appareil Azure IoT NodeJS à une passerelle IoT Edge. Pour les applications Node.js, vous devez installer le certificat d’autorité de certification racine au niveau de l’application, comme indiqué ici. Les applications NodeJS n’utilisent pas le magasin de certificats du système.

  1. Récupérez l’exemple pour edge_downstream_device.js à partir du référentiel d’exemples Azure IoT device SDK pour Node.js.
  2. Assurez-vous que vous remplissez toutes les conditions préalables pour exécuter l’exemple en passant en revue le fichier readme.md.
  3. Dans le fichier edge_downstream_device.js, mettez à jour les variables connectionString et edge_ca_cert_path.
  4. Consultez la documentation du Kit de développement logiciel pour obtenir des instructions sur la façon d’exécuter l’exemple sur votre appareil.

Pour comprendre l’exemple que vous exécutez, l’extrait de code suivant explique comment le SDK client lit le fichier de certificat et l’utilise pour établir une connexion TLS sécurisée :

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

Test de connexion à la passerelle

Utilisez cet exemple de commande sur l'appareil en aval pour le tester et vérifier qu'il peut se connecter à l'appareil de passerelle :

openssl s_client -connect mygateway.contoso.com:8883 -CAfile <CERTDIR>/certs/azure-iot-test-only.root.ca.cert.pem -showcerts

Cette commande teste la connexion via MQTTS (port 8883). Si vous utilisez un autre protocole, ajustez la commande selon les besoins pour AMQPS (5671) ou HTTPS (443).

La sortie de cette commande peut être longue, car elle comprend des informations sur tous les certificats de la chaîne. Si votre connexion réussit, vous verrez une ligne telle que celle-ci Verification: OK ou celle-ci Verify return code: 0 (ok).

Capture d’écran montrant comment vérifier une connexion de passerelle.

Résoudre les problèmes de connexion à la passerelle

Si votre connexion d’appareil en aval à son appareil de passerelle est instable, tenez compte de ces questions pour une résolution.

  • Le nom d’hôte de passerelle de la chaîne de connexion est-il identique à celui qui figure dans le fichier config IoT Edge de l’appareil de passerelle ?
  • Le nom d’hôte de passerelle peut-il être résolu en une adresse IP ? Vous pouvez résoudre les problèmes de connexion intermittente à l’aide d’un DNS ou en ajoutant une entrée de fichier hôte sur l’appareil en aval.
  • Les ports de communication de votre pare-feu sont-ils ouverts ? Une communication basée sur le protocole utilisé (MQTTS:8883/AMQPS:5671/HTTPS:433) doit pouvoir être établie entre l’appareil en aval et la passerelle transparente IoT Edge.

Étapes suivantes

Guide pratique pour étendre les fonctionnalités hors connexion IoT Edge aux appareils en aval.