Tutoriel : Configurer un serveur EST (Enrollment over Secure Transport) pour Azure IoT Edge
S’applique à : IoT Edge 1.5 IoT Edge 1.4
Important
IoT Edge 1.5 LTS et IoT Edge 1.4 LTS sont des versions prises en charge. IoT Edge 1.4 LTS sera en fin de vie le 12 novembre 2024. Si vous utilisez une version antérieure, consultez l’article Mettre à jour IoT Edge.
Avec Azure IoT Edge, vous pouvez configurer vos appareils pour qu’ils utilisent un serveur EST (Enrollment over Secure Transport) pour gérer les certificats x509.
Ce tutoriel vous guide dans l’hébergement d’un serveur EST de test, et dans la configuration d’un appareil IoT Edge pour l’inscription et le renouvellement des certificats x509. Dans ce tutoriel, vous allez apprendre à :
- Créer et héberger un serveur EST de test
- Configurer l’inscription de groupe DPS
- Configurer l’appareil
Prérequis
- Un appareil IoT Edge avec le runtime IoT Edge le plus récent installé. Si vous devez créer un appareil de test, effectuez le Guide de démarrage rapide : Déployer votre premier module IoT Edge sur un appareil Linux virtuel.
- Votre appareil IoT Edge nécessite Azure IoT Edge Runtime 1.2 ou ultérieur pour la prise en charge d’EST. Azure IoT Edge Runtime 1.3 ou version ultérieure est nécessaire pour le renouvellement de certificat EST.
- Service IoT Hub Device Provisioning (DPS) lié à IoT Hub. Pour plus d’informations sur la configuration de DPS, consultez Démarrage rapide : Configurer le service IoT Hub Device Provisioning avec le portail Azure.
Qu’est-ce que EST (Enrollment over Secure Transport) ?
EST est un protocole de chiffrement qui automatise l’émission de certificats x.509. Il est utilisé pour les clients d’infrastructure à clé publique (PKI), comme IoT Edge, qui ont besoin de certificats clients associés à une autorité de certification. EST élimine la nécessité d’une gestion manuelle des certificats, qui peut être risquée et sujette aux erreurs.
Serveur EST
Pour l’émission et le renouvellement de certificats, vous avez besoin d’un serveur EST accessible par vos appareils.
Important
Pour les solutions de niveau entreprise, envisagez : GlobalSign IoT Edge Enroll ou DigiCert IoT Device Manager.
Pour les tests et le développement, vous pouvez utiliser un serveur EST de test. Dans ce tutoriel, nous allons créer un serveur EST de test.
Exécuter un serveur EST sur un appareil
Pour démarrer rapidement, ce tutoriel montre les étapes à suivre pour déployer un serveur EST simple dans un conteneur localement sur l’appareil IoT Edge. Cette méthode est l’approche la plus simple pour l’essayer.
Le fichier Dockerfile utilise Ubuntu 18.04, une bibliothèque Cisco appelée libest
et un exemple de code serveur. Il est configuré avec le paramètre suivant, que vous pouvez modifier :
- Autorité de certification racine valide pour 20 ans
- Certificat de serveur EST valide pour 10 ans
- Définissez les jours par défaut du certificat sur 1 pour tester le renouvellement EST
- Le serveur EST s’exécute localement sur l’appareil IoT Edge dans un conteneur
Attention
N’utilisez pas ce fichier Dockerfile en production.
Connectez-vous à l’appareil, par exemple en utilisant SSH, où vous avez installé IoT Edge.
Créez un fichier nommé
Dockerfile
(en respectant la casse) et ajoutez l’exemple de contenu à en utilisant votre éditeur de texte préféré.Conseil
Si vous souhaitez héberger votre serveur EST dans Azure Container Instance, remplacez
myestserver.westus.azurecontainer.io
par le nom DNS de votre serveur EST. Quand vous choisissez un nom DNS, notez que l’étiquette DNS d’une instance de conteneur Azure doit comporter au moins cinq caractères.# DO NOT USE IN PRODUCTION - Use only for testing # FROM ubuntu:18.04 RUN apt update && apt install -y apache2-utils git openssl libssl-dev build-essential && \ git clone https://github.com/cisco/libest.git && cd libest && \ ./configure --disable-safec && make install && \ rm -rf /src && apt remove --quiet -y libssl-dev build-essential && \ apt autoremove -y && apt clean -y && apt autoclean -y && \ rm -rf /var/lib/apt /tmp/* /var/tmp/* WORKDIR /libest/example/server/ # Setting the root CA expiration to 20 years RUN sed -i "s|-days 365|-days 7300 |g" ./createCA.sh ## If you want to host your EST server remotely (for example, an Azure Container Instance), ## change myestserver.westus.azurecontainer.io to the fully qualified DNS name of your EST server ## OR, change the IP address ## and uncomment the corresponding line. # RUN sed -i "s|DNS.2 = ip6-localhost|DNS.2 = myestserver.westus.azurecontainer.io|g" ./ext.cnf # RUN sed -i "s|IP.2 = ::1|IP.2 = <YOUR EST SERVER IP ADDRESS>|g" ./ext.cnf # Set EST server certificate to be valid for 10 years RUN sed -i "s|-keyout \$EST_SERVER_PRIVKEY -subj|-keyout \$EST_SERVER_PRIVKEY -days 7300 -subj |g" ./createCA.sh # Create the CA RUN echo 1 | ./createCA.sh # Set cert default-days to 1 to show EST renewal RUN sed -i "s|default_days = 365|default_days = 1 |g" ./estExampleCA.cnf # The EST server listens on port 8085 by default # Uncomment to change the port to 443 or something else. If changed, EXPOSE that port instead of 8085. # RUN sed -i "s|estserver -c|estserver -p 443 -c |g" ./runserver.sh EXPOSE 8085 CMD ./runserver.sh
Dans le répertoire contenant votre
Dockerfile
, générez votre image à partir de l’exemple de fichier Dockerfile.sudo docker build . --tag est
Démarrez le conteneur et exposez le port 8085 du conteneur au port 8085 sur l’hôte.
sudo docker run -d -p 8085:8085 est
Votre serveur EST est maintenant en cours d’exécution et peut être atteint en utilisant
localhost
sur le port 8085. Vérifiez qu’il est disponible en exécutant une commande pour voir son certificat de serveur.openssl s_client -showcerts -connect localhost:8085
Vous devriez voir
-----BEGIN CERTIFICATE-----
vers le milieu de la sortie. La récupération du certificat vérifie que le serveur est accessible et peut présenter son certificat.
Conseil
Pour exécuter ce conteneur dans le cloud, générez l’image et envoyez (push) l’image à Azure Container Registry. Suivez ensuite le guide de démarrage rapide pour effectuer le déploiement sur Azure Container Instance.
Télécharger le certificat d’autorité de certification
Chaque appareil nécessite le certificat d’autorité de certification qui est associé à un certificat d’identité d’appareil.
Sur l’appareil IoT Edge, créez le répertoire
/var/aziot/certs
s’il n’existe pas, puis accédez-y.# If the certificate directory doen't exist, create, set ownership, and set permissions sudo mkdir -p /var/aziot/certs sudo chown aziotcs:aziotcs /var/aziot/certs sudo chmod 755 /var/aziot/certs # Change directory to /var/aziot/certs cd /var/aziot/certs
Récupérez le certificat d’autorité de certification du serveur EST dans le répertoire
/var/aziot/certs
et nommez-lecacert.crt.pem
.openssl s_client -showcerts -verify 5 -connect localhost:8085 < /dev/null | sudo awk '/BEGIN/,/END/{ if(/BEGIN/){a++}; out="cert"a".pem"; print >out}' && sudo cp cert2.pem cacert.crt.pem
Les certificats doivent être détenus par l’utilisateur du service de clés aziotcs. Définissez la propriété sur aziotcs pour tous les fichiers de certificat et définissez les autorisations. Pour plus d’informations sur la propriété et les autorisations des certificats, consultez Conditions d’autorisation.
# Give aziotcs ownership to certificates sudo chown -R aziotcs:aziotcs /var/aziot/certs # Read and write for aziotcs, read-only for others sudo find /var/aziot/certs -type f -name "*.*" -exec chmod 644 {} \;
Provisionner un appareil IoT Edge en utilisant DPS
L’utilisation du service Device Provisioning vous permet d’émettre et de renouveler automatiquement des certificats à partir d’un serveur EST dans IoT Edge. Quand vous utilisez le serveur EST du tutoriel, les certificats d’identité expirent au bout d’un jour, ce qui rend le provisionnement manuel avec IoT Hub impraticable, car chaque fois que le certificat expire, l’empreinte numérique doit être mise à jour manuellement dans IoT Hub. L’authentification de l’autorité de certification DPS auprès du groupe d’inscription permet de renouveler les certificats d’identité d’appareil sans aucune étape manuelle.
Charger le certificat d’autorité de certification sur DPS
Si vous n’avez pas de service Device Provisioning lié à IoT Hub, consultez Démarrage rapide : Configurer le service IoT Hub Device Provisioning avec le portail Azure.
Transférez le fichier
cacert.crt.pem
de votre appareil vers un ordinateur ayant accès au portail Azure, comme votre ordinateur de développement. Un moyen simple de transférer le certificat consiste à se connecter à distance à votre appareil, à afficher le certificat en utilisant la commandecat /var/aziot/certs/cacert.crt.pem
, à copier la totalité de la sortie et à coller le contenu dans un nouveau fichier sur votre ordinateur de développement.Dans le Portail Microsoft Azure, accédez à votre instance du service IoT Hub Device Provisioning.
Sous Paramètres, sélectionnez Certificats, puis +Ajouter.
Paramètre Value Nom du certificat Spécifiez un nom convivial pour le certificat de l’autorité de certification Fichier .pem ou .cer de certificat Accédez au fichier cacert.crt.pem
du serveur ESTDéfinissez l’état du certificat sur vérifié lors du chargement Cochez la case Sélectionnez Enregistrer.
Créer un groupe d’inscriptions
Dans le Portail Microsoft Azure, accédez à votre instance du service IoT Hub Device Provisioning.
Sous Paramètres, sélectionnez Gérer les inscriptions.
Sélectionnez Ajouter un groupe d’inscriptions et suivez les étapes ci-après pour configurer l’inscription.
Sous l’onglet Inscription + approvisionnement , choisissez les paramètres suivants :
Paramètre Valeur Mécanisme d’attestation Sélectionnez Certificats X.509 chargés vers cette instance de service de provisionnement des appareils Certificat principal Choisissez votre certificat dans la liste déroulante Nom du groupe Spécifiez un nom convivial pour ce inscription de groupe État d’approvisionnement Sélectionnez la case Activer cette inscription Sous l’onglet Hubs IoT, choisissez votre IoT Hub dans la liste.
Sous l’onglet Paramètres de l’appareil cochez la case Activer IoT Edge sur les appareils provisionnés.
Les autres paramètres ne sont pas pertinents pour le tutoriel. Vous pouvez accepter les paramètres par défaut.
Sélectionnez Revoir + créer.
Maintenant qu’une inscription existe pour l’appareil, le runtime IoT Edge peut gérer automatiquement les certificats d’appareil pour le hub IoT lié.
Configurer un appareil IoT Edge
Sur l’appareil IoT Edge, mettez à jour le fichier de configuration IoT Edge pour utiliser des certificats d’appareil provenant du serveur EST.
Ouvrez le fichier config IoT Edge avec un éditeur. Par exemple, utilisez l’éditeur
nano
pour ouvrir le fichier/etc/aziot/config.toml
.sudo nano /etc/aziot/config.toml
Ajoutez ou remplacez les sections suivantes dans le fichier de configuration. Ces paramètres de configuration utilisent initialement l’authentification par nom d’utilisateur et mot de passe pour obtenir le certificat d’appareil auprès du serveur EST. Le certificat d’appareil est utilisé afin de s’authentifier auprès du serveur EST pour les renouvellements futurs de certificats.
Remplacez le texte de l’espace réservé suivant :
<DPS-ID-SCOPE>
par l’ID d’étendue du DPS lié au hub IoT contenant l’appareil inscrit, etmyiotedgedevice
par l’ID d’appareil inscrit dans Azure IoT Hub. Vous trouverez la valeur de ID d’étendue dans la page Vue d’ensemble de DPS.# DPS provisioning with X.509 certificate # Replace with ID Scope from your DPS [provisioning] source = "dps" global_endpoint = "https://global.azure-devices-provisioning.net" id_scope = "<DPS-ID-SCOPE>" [provisioning.attestation] method = "x509" registration_id = "myiotedgedevice" [provisioning.attestation.identity_cert] method = "est" common_name = "myiotedgedevice" # Auto renewal settings for the identity cert # Available only from IoT Edge 1.3 and above [provisioning.attestation.identity_cert.auto_renew] rotate_key = false threshold = "80%" retry = "4%" # Trusted root CA certificate in the global EST options # Optional if the EST server's TLS certificate is already trusted by the system's CA certificates. [cert_issuance.est] trusted_certs = [ "file:///var/aziot/certs/cacert.crt.pem", ] # The default username and password for libest # Used for initial authentication to EST server # # Not recommended for production [cert_issuance.est.auth] username = "estuser" password = "estpwd" [cert_issuance.est.urls] default = "https://localhost:8085/.well-known/est"
Notes
Dans cet exemple, IoT Edge utilise un nom d’utilisateur et un mot de passe pour s’authentifier auprès du serveur EST chaque fois qu’il doit obtenir un certificat. Cette méthode n’est pas recommandée en production, car 1) elle nécessite le stockage d’un secret en texte en clair et 2) IoT Edge doit également utiliser un certificat d’identité pour s’authentifier auprès du serveur EST. Pour modifier pour la production :
- Envisagez d’utiliser des certificats de démarrage de longue durée qui peuvent être stockés sur l’appareil lors de la fabrication, de façon similaire à l’approche recommandée pour DPS. Pour savoir comment configurer un certificat de démarrage pour le serveur EST, consultez Authentifier un appareil en utilisant des certificats émis dynamiquement via EST.
- Configurez
[cert_issuance.est.identity_auto_renew]
en utilisant la même syntaxe que la configuration de renouvellement automatique de certificat d’approvisionnement ci-dessus.
De cette façon, le service de certificat IoT Edge utilise le certificat de démarrage pour l’authentification initiale auprès du serveur EST et demande un certificat d’identité pour les futures requêtes EST adressées au même serveur. Si, pour une raison quelconque, le certificat d’identité EST expire avant le renouvellement, IoT Edge revient à l’utilisation du certificat de démarrage.
Exécutez
sudo iotedge config apply
pour appliquer les nouveaux paramètres.Exécutez
sudo iotedge check
pour vérifier la configuration de votre appareil IoT Edge. Toutes les vérifications de configuration doivent réussir. Pour ce tutoriel, vous pouvez ignorer les erreurs et avertissements de préparation à la production, les avertissements du serveur DNS et les vérifications de la connectivité.Accédez à votre appareil dans IoT Hub. Les empreintes numériques de certificat ont été ajoutées automatiquement en utilisant DPS et le serveur EST.
Notes
Quand vous créez un appareil IoT Edge, il affiche le code d’état
417 -- The device's deployment configuration is not set in the Azure portal.
. Cet état est normal et signifie que l’appareil est prêt à recevoir un déploiement de module.
Tester le renouvellement de certificat
Vous pouvez immédiatement réémettre les certificats d’identité de l’appareil en supprimant les certificats et clés existants de l’appareil, puis en appliquant la configuration IoT Edge. IoT Edge détecte les fichiers manquants et demande de nouveaux certificats.
Sur l’appareil IoT Edge, arrêtez le runtime IoT Edge.
sudo iotedge system stop
Supprimez les certificats et les clés existants.
sudo sh -c "rm /var/lib/aziot/certd/certs/*" sudo sh -c "rm /var/lib/aziot/keyd/keys/*"
Appliquez la configuration IoT Edge pour renouveler les certificats.
sudo iotedge config apply
Vous aurez peut-être à attendre quelques minutes pour que le runtime démarre.
Accédez à votre appareil dans IoT Hub. Les empreintes numériques du certificat ont été mises à jour.
Listez les fichiers de certificat en utilisant la commande
sudo ls -l /var/lib/aziot/certd/certs
. Vous devez voir des dates de création récentes pour les fichiers de certificat d’appareil.Utilisez la commande
openssl
pour vérifier le contenu du nouveau certificat. Par exemple :sudo openssl x509 -in /var/lib/aziot/certd/certs/deviceid-bd732105ef89cf8edd2606a5309c8a26b7b5599a4e124a0fe6199b6b2f60e655.cer -text -noout
Remplacez le nom du fichier de certificat d’appareil (.cer) par le fichier de certificat de votre appareil.
Vous devez voir que la plage de dates Validité du certificat a changé.
Voici d’autres façons facultatives de tester le renouvellement de certificat. Ces vérifications montrent comment IoT Edge renouvelle les certificats à partir du serveur EST lorsqu’ils expirent ou sont manquants. Après chaque test, vous pouvez vérifier les nouvelles empreintes dans le portail Azure et utiliser la commande openssl
pour vérifier le nouveau certificat.
- Essayez en attendant un jour pour que le certificat expire. Le serveur EST de test est configuré pour créer des certificats qui expirent après un jour. IoT Edge renouvelle automatiquement le certificat.
- Essayez d’ajuster le pourcentage de
threshold
pour le renouvellement automatique défini dansconfig.toml
(actuellement défini sur 80 % dans l’exemple de configuration). Par exemple, définissez-le sur10%
et observez le renouvellement du certificat environ toutes les 2 heures. - Essayez d’ajuster
threshold
sur un chiffre entier suivi dem
(minutes). Par exemple, définissez-le sur60m
et observez le renouvellement de certificat 1 heure avant l’expiration.
Nettoyer les ressources
Vous pouvez conserver les ressources et les configurations que vous avez créées dans ce tutoriel et les réutiliser. Sinon, vous pouvez supprimer les ressources Azure et les configurations locales que vous avez utilisées dans cet article pour éviter les frais.
Supprimer les ressources Azure
La suppression des ressources et des groupes de ressources Azure est irréversible. Veillez à ne pas supprimer accidentellement les mauvaises ressources ou le mauvais groupe de ressources. Si vous avez créé le hub IoT à l’intérieur d’un groupe de ressources existant qui contient des ressources que vous souhaitez conserver, supprimez uniquement la ressource du hub IoT, plutôt que le groupe de ressources.
Pour supprimer les ressources :
Connectez-vous au Portail Azure, puis sélectionnez Groupes de ressources.
Sélectionnez le nom du groupe de ressources contenant vos ressources de test de IoT Edge.
Consultez la liste des ressources que contient votre groupe de ressources. Si vous souhaitez toutes les supprimer, vous pouvez sélectionner Supprimer le groupe de ressources. Si vous souhaitez en supprimer seulement quelques-unes, vous pouvez sélectionner chaque ressource pour la supprimer individuellement.
Étapes suivantes
- Pour utiliser le serveur EST pour émettre des certificats d’autorité de certification Edge, consultez l’exemple de configuration.
- L’utilisation du nom d’utilisateur et du mot de passe pour démarrer l’authentification auprès du serveur EST n’est pas recommandée pour la production. Au lieu de cela, envisagez d’utiliser des certificats de démarrage de longue durée qui peuvent être stockés sur l’appareil lors de la fabrication, de façon similaire à l’approche recommandée pour DPS. Pour savoir comment configurer un certificat de démarrage pour le serveur EST, consultez Authentifier un appareil en utilisant des certificats émis dynamiquement via EST.
- Le serveur EST peut également être utilisé pour émettre des certificats pour tous les appareils d’une hiérarchie. Si vous avez des exigences ISA-95, il peut être nécessaire d’exécuter une chaîne de serveurs EST avec un serveur sur chaque couche ou d’utiliser le module proxy d’API pour transférer les requêtes. Pour plus d’informations, consultez le Blog de Kevin.
- Pour les solutions de niveau entreprise, envisagez : GlobalSign IoT Edge Enroll ou DigiCert IoT Device Manager.
- Pour plus d’informations sur les certificats, consultez Comprendre comment Azure IoT Edge utilise les certificats.