Démarrage rapide : Provisionner un appareil simulé avec certificat X.509
Dans ce démarrage rapide, vous créez un appareil simulé sur votre machine Windows. L’appareil simulé est configuré pour utiliser l’attestation de certificat X.509 pour l’authentification. Une fois votre appareil configuré, vous le configurez dans votre hub IoT en utilisant le Service IoT Hub Device Provisioning.
Si vous ne connaissez pas le processus de provisionnement, passez en revue la vue d’ensemble du provisionnement. Vérifiez également que vous avez suivi la procédure décrite dans Configurer le service d’approvisionnement d’appareil IoT Hub avec le portail Azure avant de continuer.
Ce guide de démarrage rapide présente une solution pour une station de travail Windows. Vous pouvez toutefois également effectuer les procédures sur Linux. Pour obtenir un exemple sur Linux, consultez Tutoriel : Provisionner pour la géolatence.
Prérequis
Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
Effectuez les étapes décrites dans Configurer le service IoT Hub Device Provisioning avec le portail Azure.
Les prérequis suivants s’appliquent à un environnement de développement Windows. Pour Linux ou macOS, consultez la section appropriée de Préparer votre environnement de développement dans la documentation du kit de développement logiciel (SDK).
Installez Visual Studio 2022 avec la charge de travail « Développement Desktop en C++ » activée. Visual Studio 2015, Visual Studio 2017 et Visual Studio 19 sont également pris en charge. Pour Linux ou macOS, consultez la section appropriée de Préparer votre environnement de développement dans la documentation du kit de développement logiciel (SDK).
Installez le dernier système de génération CMake. Veillez à cocher l’option qui ajoute l’exécutable CMake à votre chemin d’accès.
Important
Vérifiez que les prérequis de Visual Studio (Visual Studio et la charge de travail « Développement Desktop en C++ ») sont installés sur votre machine avant de commencer l’installation de
CMake
. Une fois les composants requis en place et le téléchargement effectué, installez le système de génération de CMake. Sachez également que les versions antérieures du système de génération CMake ne permettent pas de générer le fichier solution utilisé dans cet article. Veillez à utiliser la dernière version de CMake.
Les prérequis suivants s’appliquent à un environnement de développement Windows. Pour Linux ou macOS, consultez la section appropriée de Préparer votre environnement de développement dans la documentation du kit de développement logiciel (SDK).
Installez le kit SDK .NET 6.0 sur votre machine Windows. Vous pouvez exécuter la commande suivante pour vérifier votre version.
dotnet --info
Les prérequis suivants s’appliquent à un environnement de développement Windows. Pour Linux ou macOS, consultez la section appropriée de Préparer votre environnement de développement dans la documentation du kit de développement logiciel (SDK).
- Installez Node.js v4.0 ou une version ultérieure sur votre machine.
Les prérequis suivants s’appliquent à un environnement de développement Windows.
- Python 3.6 ou une version ultérieure sur votre machine.
Les prérequis suivants s’appliquent à un environnement de développement Windows. Pour Linux ou macOS, consultez la section appropriée de Préparer votre environnement de développement dans la documentation du kit de développement logiciel (SDK).
Installez Java SE Development Kit 8 ou une version ultérieure sur votre machine.
Téléchargez et installez Maven.
Installez la dernière version de Git. Vérifiez que Git est ajouté aux variables d’environnement accessibles à la fenêtre de commande. Consultez Outils clients Git de Software Freedom Conservancy pour accéder à la dernière version des outils
git
à installer, ce qui inclut Git Bash, l’application en ligne de commande que vous pouvez utiliser pour interagir avec votre dépôt Git local.Assurez-vous qu’OpenSSL est installé sur votre ordinateur. Sur Windows, votre installation de Git inclut une installation d’OpenSSL. Vous pouvez accéder à OpenSSL à partir de l’invite Git Bash. Pour vérifier qu’OpenSSL est installé, ouvrez une invite Git Bash et entrez
openssl version
.Notes
À moins que vous ne connaissiez OpenSSL et que vous l’ayez déjà installé sur votre ordinateur Windows, nous vous recommandons d’utiliser OpenSSL à partir de l’invite Git Bash. Vous pouvez également choisir de télécharger le code source et de générer OpenSSL. Pour en savoir plus, consultez la page Téléchargements OpenSSL. Vous pouvez également télécharger OpenSSL prédéfini auprès d’un tiers. Pour en savoir plus, consultez le wiki OpenSSL. Microsoft ne garantit pas la validité des packages téléchargés auprès de tiers. Si vous choisissez de générer ou de télécharger OpenSSL, vérifiez que le binaire OpenSSL est accessible dans votre chemin d’accès et que la variable d’environnement
OPENSSL_CNF
est définie sur le chemin d’accès de votre fichier openssl.cnf.Ouvrez une invite de commandes Windows et une invite Git Bash.
Les étapes décrites dans ce démarrage rapide supposent que vous utilisez un ordinateur Windows et l’installation OpenSSL qui est installée dans le cadre de Git. Vous utilisez l’invite Git Bash pour émettre des commandes OpenSSL et l’invite de commandes Windows pour tout le reste. Si vous utilisez Linux, vous pouvez émettre toutes les commandes à partir d’un interpréteur de commandes Bash.
Préparer votre environnement de développement
Dans cette section, vous allez préparer un environnement de développement qui est utilisé pour générer le SDK C Azure IoT . L’exemple de code tente de provisionner l’appareil pendant la séquence de démarrage de ce dernier.
Ouvrez un navigateur web, puis accédez à la page des versions du kit SDK C Azure IoT.
Sélectionnez l’onglet Étiquettes en haut de la page.
Copiez le nom d’étiquette de la version la plus récente du SDK C Azure IoT.
Dans votre invite de commandes Windows, exécutez les commandes suivantes pour cloner la dernière version du dépôt GitHub de l’appareil Azure IoT SDK pour C. Remplacez
<release-tag>
par la balise que vous avez copiée à l’étape précédente, par exemple :lts_01_2023
.git clone -b <release-tag> https://github.com/Azure/azure-iot-sdk-c.git cd azure-iot-sdk-c git submodule update --init
Cette opération peut prendre plusieurs minutes.
Une fois l’opération terminée, exécutez les commandes suivantes à partir du répertoire
azure-iot-sdk-c
:mkdir cmake cd cmake
L’exemple de code utilise un certificat X.509 pour fournir l’attestation via l’authentification X.509. Exécutez la commande suivante pour générer une version du SDK propre à votre plateforme de développement qui inclut le client de provisionnement des appareils. Une solution Visual Studio pour l’appareil simulé est générée dans le répertoire
cmake
.Lorsque vous spécifiez le chemin d’accès utilisé
-Dhsm_custom_lib
dans la commande suivante, veillez à utiliser le chemin d’accès absolu dans le répertoirecmake
que vous avez créé précédemment. Le chemin d’accès indiqué suppose que vous avez cloné le Kit de développement logiciel (SDK) C dans le répertoire racine du lecteur C. Si vous avez utilisé un autre répertoire, ajustez le chemin d’accès en conséquence.
Conseil
Si cmake
ne trouve pas votre compilateur C++, vous risquez de rencontrer des erreurs de génération lors de l’exécution de la commande ci-dessus. Si cela se produit, essayez d’exécuter la commande dans l’invite de commandes de Visual Studio.
Quand la génération aboutit, les dernières lignes de la sortie ressemblent à la sortie suivante :
-- Building for: Visual Studio 17 2022 -- Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.22000. -- The C compiler identification is MSVC 19.32.31329.0 -- The CXX compiler identification is MSVC 19.32.31329.0 ... -- Configuring done -- Generating done -- Build files have been written to: C:/azure-iot-sdk-c/cmake
Dans votre invite de commandes Windows, clonez le dépôt GitHub Azure IoT SDK pour C# avec la commande suivante :
git clone https://github.com/Azure/azure-iot-sdk-csharp.git
Dans votre invite de commandes Windows, clonez le dépôt GitHub Azure IoT SDK pour Node.js à l’aide de la commande suivante :
git clone https://github.com/Azure/azure-iot-sdk-node.git
Dans votre invite de commandes Windows, clonez le dépôt GitHub d’appareil SDK Azure IoT pour Python à l’aide de la commande suivante :
git clone -b v2 https://github.com/Azure/azure-iot-sdk-python.git --recursive
Notes
Les exemples utilisés dans ce tutoriel se trouvent dans la branche v2 du référentiel azure-iot-sdk-python. V3 du Kit de développement logiciel (SDK) Python est disponible en version bêta.
Dans votre invite de commandes Windows, clonez le dépôt GitHub d’exemples Azure IoT pour Java à l’aide de la commande suivante :
git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
Accédez au répertoire
azure-iot-sdk-java
racine et générez le projet pour télécharger tous les packages nécessaires.cd azure-iot-sdk-java mvn install -DskipTests=true
Créer un certificat auto-signé d’appareil X.509
Dans cette section, vous utilisez OpenSSL pour créer un certificat X.509 auto-signé et une clé privée. Ce certificat est chargé vers votre instance de service d’approvisionnement, puis vérifié par le service.
Attention
Utilisez des certificats créés avec OpenSSL dans ce démarrage rapide pour les tests de développement uniquement. N’utilisez pas ces certificats en production. Ces certificats expirent au bout de 30 jours et peuvent contenir des mots de passe codés en dur, tels que 1234. Pour en savoir plus sur l’obtention de certificats appropriés pour une utilisation en production, consultez Guide pratique pour obtenir un certificat d’autorité de certification X.509 dans la documentation Azure IoT Hub.
Effectuez les étapes décrites dans cette section dans votre invite Git Bash.
Dans votre invite Git Bash, accédez à un répertoire dans lequel vous souhaitez créer vos certificats.
Exécutez la commande suivante :
winpty openssl req -outform PEM -x509 -sha256 -newkey rsa:4096 -keyout device-key.pem -out device-cert.pem -days 30 -extensions usr_cert -addext extendedKeyUsage=clientAuth -subj "//CN=my-x509-device"
Important
La barre oblique supplémentaire spécifiée dans le nom d’objet (
//CN=my-x509-device
) est nécessaire uniquement pour l’échappement de la chaîne avec Git sur les plateformes Windows.Quand vous êtes invité à entrer la phrase secrète PEM, utilisez la phrase secrète
1234
.Quand vous êtes invité à vérifier la phrase secrète PEM, réutilisez la phrase secrète
1234
.Un fichier de certificat de clé publique (device-cert.pem) et un fichier de clé privée (device.key.pem) doivent maintenant être générés dans le répertoire où vous avez exécuté la commande
openssl
.Le nom commun (CN) sujet du fichier de certificat est défini sur
my-x509-device
. Pour les inscriptions basées sur X.509, l’ID d’inscription est défini sur le nom commun. L’ID d’inscription est une chaîne insensible à la casse de caractères alphanumériques et des caractères spéciaux :'-'
,'.'
,'_'
,':'
. Le dernier caractère doit être alphanumérique ou être un tiret ('-'
). Le nom commun doit respecter ce format. DPS prend en charge les ID d’inscription jusqu’à 128 caractères ; toutefois, la longueur maximale du nom commun de l’objet dans un certificat X.509 est de 64 caractères. L’ID d’inscription est donc limité à 64 caractères lors de l’utilisation de certificats X.509.Le fichier de certificat est encodé en Base 64. Pour afficher le nom commun (CN) de l’objet et d’autres propriétés du fichier de certificat, entrez la commande suivante :
Certificate: Data: Version: 3 (0x2) Serial Number: 77:3e:1d:e4:7e:c8:40:14:08:c6:09:75:50:9c:1a:35:6e:19:52:e2 Signature Algorithm: sha256WithRSAEncryption Issuer: CN = my-x509-device Validity Not Before: May 5 21:41:42 2022 GMT Not After : Jun 4 21:41:42 2022 GMT Subject: CN = my-x509-device Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (4096 bit) Modulus: 00:d2:94:37:d6:1b:f7:43:b4:21:c6:08:1a:d6:d7: e6:40:44:4e:4d:24:41:6c:3e:8c:b2:2c:b0:23:29: ... 23:6e:58:76:45:18:03:dc:2e:9d:3f:ac:a3:5c:1f: 9f:66:b0:05:d5:1c:fe:69:de:a9:09:13:28:c6:85: 0e:cd:53 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 63:C0:B5:93:BF:29:F8:57:F8:F9:26:44:70:6F:9B:A4:C7:E3:75:18 X509v3 Authority Key Identifier: keyid:63:C0:B5:93:BF:29:F8:57:F8:F9:26:44:70:6F:9B:A4:C7:E3:75:18 X509v3 Extended Key Usage: TLS Web Client Authentication Signature Algorithm: sha256WithRSAEncryption 82:8a:98:f8:47:00:85:be:21:15:64:b9:22:b0:13:cc:9e:9a: ed:f5:93:b9:4b:57:0f:79:85:9d:89:47:69:95:65:5e:b3:b1: ... cc:b2:20:9a:b7:f2:5e:6b:81:a1:04:93:e9:2b:92:62:e0:1c: ac:d2:49:b9:36:d2:b0:21
L’exemple de code nécessite une clé privée qui n’est pas chiffrée. Exécutez la commande suivante pour créer une clé privée non chiffrée :
Lorsque vous êtes invité à entrer une phrase secrète pour device-key.pem :, utilisez la même phrase secrète que celle utilisée précédemment,
1234
.
Maintenez l’invite Git Bash ouverte. Vous en aurez besoin ultérieurement dans ce démarrage rapide.
L’exemple de code C# est configuré pour utiliser des certificats X.509 qui sont stockés dans un fichier PKCS#12 protégé par mot de passe (certificate.pfx
). Vous avez toujours besoin du fichier PEM de certificat de clé publique (device-cert.pem
) mis en forme nouvellement créé pour créer une entrée d’inscription individuelle plus loin dans ce démarrage rapide.
Pour générer le fichier PKCS12 attendu dans l’exemple, entrez la commande suivante :
Lorsque vous êtes invité à entrer une phrase secrète pour device-key.pem :, utilisez la même phrase secrète que celle utilisée précédemment,
1234
.Lorsque vous êtes invité à entrer le mot de passe d’exportation :, utilisez le mot de passe
1234
.Lorsque vous êtes invité vérifier - entrer le mot de passe d’exportation :, utilisez à nouveau le mot de passe
1234
.Un fichier PKCS12 de certificat (certificate.pfx) doit maintenant être généré dans le répertoire où vous avez exécuté la commande
openssl
.Copiez le fichier PKCS12 de certificat dans le répertoire du projet pour l’exemple d’approvisionnement des appareils X.509. Le chemin d’accès donné est relatif à l’emplacement où vous avez téléchargé l’exemple de dépôt.
cp certificate.pfx ./azure-iot-sdk-csharp/provisioning/device/samples/"Getting Started"/X509Sample
Vous n’avez pas besoin de l’invite Git Bash pour le reste de ce démarrage rapide. Toutefois, vous souhaiterez peut-être l’ouvrir pour vérifier votre certificat si vous rencontrez des problèmes dans les étapes ultérieures.
L’exemple de code nécessite une clé privée qui n’est pas chiffrée. Exécutez la commande suivante pour créer une clé privée non chiffrée :
Lorsque vous êtes invité à entrer une phrase secrète pour device-key.pem :, utilisez la même phrase secrète que celle utilisée précédemment,
1234
.Copiez le certificat d’appareil et la clé privée non chiffrée dans le répertoire du projet pour l’exemple d’approvisionnement des appareils X.509. Le chemin d’accès donné est relatif à l’emplacement où vous avez téléchargé le Kit de développement logiciel (SDK).
cp device-cert.pem ./azure-iot-sdk-node/provisioning/device/samples cp unencrypted-device-key.pem ./azure-iot-sdk-node/provisioning/device/samples
Vous n’avez pas besoin de l’invite Git Bash pour le reste de ce démarrage rapide. Toutefois, vous souhaiterez peut-être l’ouvrir pour vérifier votre certificat si vous rencontrez des problèmes dans les étapes ultérieures.
Copiez le certificat d’appareil et la clé privée dans le répertoire du projet pour l’exemple d’approvisionnement des appareils X.509. Le chemin d’accès donné est relatif à l’emplacement où vous avez téléchargé le Kit de développement logiciel (SDK).
cp device-cert.pem ./azure-iot-sdk-python/samples/async-hub-scenarios cp device-key.pem ./azure-iot-sdk-python/samples/async-hub-scenarios
Vous n’avez pas besoin de l’invite Git Bash pour le reste de ce démarrage rapide. Toutefois, vous souhaiterez peut-être l’ouvrir pour vérifier votre certificat si vous rencontrez des problèmes dans les étapes ultérieures.
L’exemple de code Java nécessite une clé privée qui n’est pas chiffrée. Exécutez la commande suivante pour créer une clé privée non chiffrée :
Lorsque vous êtes invité à entrer une phrase secrète pour device-key.pem :, utilisez la même phrase secrète que celle utilisée précédemment,
1234
.
Maintenez l’invite Git Bash ouverte. Vous en aurez besoin ultérieurement dans ce démarrage rapide.
Créer une inscription d’appareil
Le service Azure IoT Device Provisioning prend en charge deux types d’inscriptions :
- Groupes d’inscription : utilisés pour inscrire plusieurs appareils connexes.
- Inscriptions individuelles : utilisées pour inscrire un seul appareil.
Cet article décrit l’inscription individuelle d’un appareil à provisionner auprès d’un hub IoT.
Connectez-vous au portail Azure et accédez à votre instance du service Device Provisioning.
Sélectionnez Gérer les inscriptions dans la section Paramètres du menu de navigation.
Sélectionnez l’onglet Inscriptions individuelles, puis Ajouter une inscription individuelle.
Dans la section Inscription + approvisionnement de la page Ajouter une inscription, fournissez les informations suivantes pour configurer les détails de l’inscription :
Champ Description Attestation Sélectionnez Certificats clients X.509 comme mécanisme d’attestation. Paramètres de certificat X.509 Chargez un ou deux certificats qui seront utilisés pour vérifier l’appareil pour cette inscription. État d’approvisionnement Cochez la case Activer cette inscription si vous souhaitez que cette inscription soit disponible pour approvisionner son appareil. Désélectionnez cette case si vous souhaitez désactiver l’inscription. Vous pouvez modifier ce paramètre ultérieurement. Stratégie de réapprovisionnement Choisissez une stratégie de réapprovisionnement qui reflète la façon dont vous souhaitez que DPS gère les appareils qui demandent le réapprovisionnement. Pour plus d’informations, consultez Réplica de réapprovisionnement. Sélectionnez Suivant : hubs IoT.
Sous l’onglet IoT Hubs de la page Ajouter une inscription, fournissez les informations suivantes pour déterminer les hubs IoT pour lesquels l’inscription peut approvisionner des appareils :
Champ Description Hubs IoT cibles Sélectionnez un ou plusieurs de vos hubs IoT liés, ou ajoutez un nouveau lien à un hub IoT. Pour en savoir plus sur la liaison de hubs IoT à votre instance DPS, consultez Comment lier et gérer des hubs IoT. Stratégie d’allocation Si vous avez sélectionné plusieurs hubs IoT liés, sélectionnez la façon dont vous souhaitez affecter des appareils aux différents hubs. Pour en savoir plus sur les stratégies d’allocation, consultez le guide pratique pour utiliser des stratégies d’allocation.
Si vous avez sélectionné un seul hub IoT lié, nous vous recommandons d’utiliser la stratégie de distribution uniformément pondérée.Sélectionnez Suivant : paramètres de l’appareil
Sous l’onglet Paramètres de l’appareil de la page Ajouter une inscription, fournissez les informations suivantes pour définir la façon dont les appareils nouvellement approvisionnés seront configurés :
Champ Description ID de périphérique Fournissez un ID d’appareil qui sera attribué à l’appareil approvisionné dans IoT Hub. Si vous ne fournissez pas un ID d’appareil, l’ID d’inscription est utilisé. IoT Edge Cochez Activer IoT Edge sur les appareils approvisionnés si l’appareil approvisionné exécute Azure IoT Edge. Désélectionnez cette case si cette inscription concerne un appareil sans IoT Edge activé. Balises d’appareil Utilisez cette zone de texte pour fournir les balises que vous souhaitez appliquer au jumeau d’appareil de l’appareil approvisionné. Propriétés souhaitées Utilisez cette zone de texte pour fournir les propriétés souhaitées que vous souhaitez appliquer au jumeau d’appareil de l’appareil approvisionné. Pour en savoir plus, consultez Comprendre et utiliser les jumeaux d’appareil IoT Hub.
Sélectionnez Suivant : Vérifier + créer.
Dans l’onglet Vérifier + créer, vérifiez toutes vos valeurs, puis sélectionnez Créer.
Préparer et exécuter le code de provisionnement d’un appareil
Dans cette section, vous mettez à jour l’exemple de code pour envoyer la séquence de démarrage de l’appareil à votre instance de service d’approvisionnement des appareils. Grâce à cette séquence de démarrage, l’appareil est reconnu et attribué à un hub IoT lié à l’instance DPS.
Dans cette section, vous utilisez votre invite Git Bash et l’IDE Visual Studio.
Configurer le code de l’appareil de provisionnement
Dans cette section, vous mettez à jour l’exemple de code avec les informations de votre instance du service Device Provisioning.
Dans le portail Azure, sélectionnez l’onglet Vue d’ensemble de votre service Device Provisioning.
Copiez la valeur Étendue de l’ID.
Lancez Visual Studio et ouvrez le nouveau fichier de solution créé dans le répertoire
cmake
que vous avez créé à la racine du dépôt git azure-iot-sdk-c. Le fichier de la solution est nomméazure_iot_sdks.sln
.Dans l’Explorateur de solutions pour Visual Studio, accédez à Provision_Samples > prov_dev_client_sample > Source Files et ouvrez prov_dev_client_sample.c.
Recherchez la constante
id_scope
et remplacez la valeur par la valeur Étendue de l’ID que vous avez copiée à l’étape 2.static const char* id_scope = "0ne00000A0A";
Recherchez la définition de la fonction
main()
dans le même fichier. Vérifiez que lahsm_type
variable a la valeurSECURE_DEVICE_TYPE_X509
.SECURE_DEVICE_TYPE hsm_type; //hsm_type = SECURE_DEVICE_TYPE_TPM; hsm_type = SECURE_DEVICE_TYPE_X509; //hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;
Enregistrez vos modifications.
Cliquez avec le bouton droit sur le projet dps_client_sample et sélectionnez Définir comme projet de démarrage.
Configurer le code de stub HSM personnalisé
Les détails de l’interaction avec le stockage matériel sécurisé réel varient en fonction du matériel. Par conséquent, le certificat et la clé privée utilisés par l’appareil simulé dans ce démarrage rapide sont codés en dur dans le code de stub du module HSM personnalisé.
Pour mettre à jour le code de stub HSM personnalisé afin de simuler l’identité de l’appareil avec l’ID my-x509-device
:
Dans l’Explorateur de solutions pour Visual Studio, accédez à Provision_Samples > custom_hsm_example > Source Files et ouvrez custom_hsm_example.c.
Mettez à jour la valeur de chaîne de la constante de chaîne
COMMON_NAME
à l’aide du nom commun que vous avez utilisé lors de la génération du certificat d’appareil,my-x509-device
.static const char* const COMMON_NAME = "my-x509-device";
Mettez à jour la valeur de chaîne de la chaîne constante
CERTIFICATE
à l’aide du certificat d’appareil, device-cert.pem, que vous avez généré précédemment.La syntaxe du texte du certificat de l’exemple doit suivre le modèle suivant, sans espace supplémentaire ni analyse effectuée par Visual Studio.
static const char* const CERTIFICATE = "-----BEGIN CERTIFICATE-----\n" "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n" ... "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n" "-----END CERTIFICATE-----";
La mise à jour manuelle de cette valeur de chaîne peut être sujette à des erreurs. Pour générer la syntaxe appropriée, vous pouvez copier et coller la commande suivante dans votre invite Git Bash, puis appuyez sur Entrée. Cette commande génère la syntaxe de la valeur de constante de chaîne
CERTIFICATE
et l’écrit dans la sortie.sed -e 's/^/"/;$ !s/$/""\\n"/;$ s/$/"/' device-cert.pem
Copiez et collez le texte du certificat de sortie pour la valeur de constante.
Mettez à jour la valeur de chaîne de la constante
PRIVATE_KEY
avec la clé privée non chiffrée pour votre certificat d’appareil, unencrypted-device-key.pem.La syntaxe du texte de la clé privée doit suivre le modèle suivant, sans espace supplémentaire ni analyse effectuée par Visual Studio.
static const char* const PRIVATE_KEY = "-----BEGIN RSA PRIVATE KEY-----\n" "MIIJJwIBAAKCAgEAtjvKQjIhp0EE1PoADL1rfF/W6v4vlAzOSifKSQsaPeebqg8U\n" ... "X7fi9OZ26QpnkS5QjjPTYI/wwn0J9YAwNfKSlNeXTJDfJ+KpjXBcvaLxeBQbQhij\n" "-----END RSA PRIVATE KEY-----";
La mise à jour manuelle de cette valeur de chaîne peut être sujette à des erreurs. Pour générer la syntaxe appropriée, vous pouvez copier et coller la commande suivante dans votre invite Git Bash, puis appuyez sur Entrée. Cette commande génère la syntaxe de la valeur de constante de chaîne
PRIVATE_KEY
et l’écrit dans la sortie.sed -e 's/^/"/;$ !s/$/""\\n"/;$ s/$/"/' unencrypted-device-key.pem
Copiez et collez le texte de la clé privée de sortie pour la valeur de constante.
Enregistrez vos modifications.
Cliquez avec le bouton droit sur le projet custom_hsm_-_example, puis sélectionnez Générer.
Important
Vous devez générer le projet custom_hsm_example avant de générer le reste de la solution dans la section suivante.
Exécution de l'exemple
Dans le menu Visual Studio, sélectionnez Déboguer>Exécuter sans débogage pour exécuter la solution. Si vous êtes invité à régénérer le projet, sélectionnez Oui pour le faire avant de l’exécuter.
La sortie suivante illustre un exemple de l’appareil simulé
my-x509-device
démarrant correctement et se connectant au service d’approvisionnement. L’appareil est attribué à un hub IoT et inscrit :Provisioning API Version: 1.8.0 Registering Device Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING Registration Information received from service: contoso-iot-hub-2.azure-devices.net, deviceId: my-x509-device Press enter key to exit:
Dans cette section, vous utilisez votre invite de commandes Windows.
Dans le portail Azure, sélectionnez l’onglet Vue d’ensemble de votre service Device Provisioning.
Copiez la valeur Étendue de l’ID.
Dans votre invite de commandes Windows, accédez au répertoire X509Sample. Ce répertoire se trouve dans le répertoire .\azure-iot-sdk-csharp\provisioning\device\samples\getting started\X509Sample dans le répertoire où vous avez cloné les exemples sur votre ordinateur.
Entrez la commande suivante pour générer et exécuter l’exemple d’approvisionnement des appareils X.509 (en remplaçant la valeur
<IDScope>
par l’étendue de l’ID que vous avez copiée dans la section précédente). Le fichier de certificat est ./certificate.pfx par défaut et vous invite à entrer le mot de passe .pfx.dotnet run -- -s <IDScope>
Si vous souhaitez passer le certificat et le mot de passe en paramètre, vous pouvez utiliser l’exemple suivant.
Notes
Vous pouvez passer des paramètres supplémentaires pendant l’exécution de l’application pour changer le TransportType (-t) et le GlobalDeviceEndpoint (-g).
dotnet run -- -s 0ne00000A0A -c certificate.pfx -p 1234
L’appareil se connecte à DPS et est affecté à un hub IoT. Ensuite, l’appareil envoie un message de télémétrie au hub IoT.
Loading the certificate... Enter the PFX password for certificate.pfx: **** Found certificate: A33DB11B8883DEE5B1690ACFEAAB69E8E928080B CN=my-x509-device; PrivateKey: True Using certificate A33DB11B8883DEE5B1690ACFEAAB69E8E928080B CN=my-x509-device Initializing the device provisioning client... Initialized for registration Id my-x509-device. Registering with the device provisioning service... Registration status: Assigned. Device my-x509-device registered to MyExampleHub.azure-devices.net. Creating X509 authentication for IoT Hub... Testing the provisioned device with IoT Hub... Sending a telemetry message... Finished.
Dans cette section, vous utilisez votre invite de commandes Windows.
Dans le portail Azure, sélectionnez l’onglet Vue d’ensemble de votre service Device Provisioning.
Copiez la valeur Étendue de l’ID.
Dans votre invite de commandes Windows, accédez à l’exemple de répertoire et installez les packages nécessaires à l’exemple. Le chemin d’accès affiché est relatif à l’emplacement où vous avez cloné le Kit de développement logiciel (SDK).
cd .\azure-iot-sdk-node\provisioning\device\samples npm install
L’exemple utilise cinq variables d’environnement pour authentifier et provisionner un appareil IoT à l’aide du service DPS. Ces variables d’environnement sont :
Nom de la variable Description PROVISIONING_HOST
Point de terminaison à utiliser pour la connexion à votre instance DPS. Pour ce démarrage rapide, utilisez le point de terminaison global, global.azure-devices-provisioning.net
.PROVISIONING_IDSCOPE
Étendue de l’ID pour votre instance DPS. PROVISIONING_REGISTRATION_ID
L’ID d’inscription pour votre appareil. Il doit correspondre au nom commun de l’objet dans le certificat d’appareil. CERTIFICATE_FILE
Chemin d’accès à votre fichier de certificat d’appareil. KEY_FILE
Le chemin d’accès à votre fichier de clé privée d’appareil. Ajoutez les variables d’environnement pour le point de terminaison d’appareil global et l’ID de l’étendue. Remplacez
<id-scope>
par la valeur que vous avez copiée à l’étape 2.set PROVISIONING_HOST=global.azure-devices-provisioning.net set PROVISIONING_IDSCOPE=<id-scope>
Définissez la variable d’environnement pour l’ID d’inscription d’appareil. L’ID d’inscription de l’appareil IoT doit correspondre au nom d’objet commun sur son certificat d’appareil. Si vous avez suivi les étapes de ce démarrage rapide et généré un certificat de test autosigné,
my-x509-device
correspond à la fois au nom d’objet et à l’ID d’inscription de l’appareil.set PROVISIONING_REGISTRATION_ID=my-x509-device
Définissez les variables d’environnement pour le certificat d’appareil et les fichiers de clé privée de l’appareil (non chiffrés).
set CERTIFICATE_FILE=.\device-cert.pem set KEY_FILE=.\unencrypted-device-key.pem
Exécutez l’exemple et vérifiez que l’appareil a été approvisionné correctement.
node register_x509.js
Vous devez obtenir une sortie similaire à la suivante :
registration succeeded assigned hub=contoso-hub-2.azure-devices.net deviceId=my-x509-device Client connected send status: MessageEnqueued
Dans cette section, vous utilisez votre invite de commandes Windows.
Dans le portail Azure, sélectionnez l’onglet Vue d’ensemble de votre service Device Provisioning.
Copiez les valeurs Étendue de l’ID et Point de terminaison d’appareil global.
Dans votre invite de commandes Windows, accédez au répertoire de l’exemple provision_x509.py. Le chemin d’accès affiché est relatif à l’emplacement où vous avez cloné le Kit de développement logiciel (SDK).
cd ./azure-iot-sdk-python/samples/async-hub-scenarios
Cet exemple utilise six variables d’environnement pour authentifier et provisionner un appareil IoT à l’aide du service DPS. Ces variables d’environnement sont :
Nom de la variable Description PROVISIONING_HOST
Le point de terminaison global utilisé pour la connexion à votre instance DPS PROVISIONING_IDSCOPE
Étendue de l’ID pour votre instance DPS. DPS_X509_REGISTRATION_ID
L’ID d’inscription pour votre appareil. Elle doit également correspondre au nom d’objet sur le certificat de l’appareil. X509_CERT_FILE
Chemin d’accès à votre fichier de certificat d’appareil. X509_KEY_FILE
Chemin d’accès au fichier de clé privée de votre certificat d’appareil. PASS_PHRASE
Phrase secrète utilisée pour chiffrer le certificat et le fichier de clé privée ( 1234
).Ajoutez les variables d’environnement pour le point de terminaison d’appareil global et l’ID de l’étendue.
set PROVISIONING_HOST=global.azure-devices-provisioning.net set PROVISIONING_IDSCOPE=<ID scope for your DPS resource>
Définissez la variable d’environnement de l’ID d’inscription. L’ID d’inscription de l’appareil IoT doit correspondre au nom d’objet sur son certificat d’appareil. Si vous avez suivi les étapes de ce démarrage rapide et généré un certificat de test autosigné,
my-x509-device
correspond à la fois au nom d’objet et à l’ID d’inscription de l’appareil.set DPS_X509_REGISTRATION_ID=my-x509-device
Définissez les variables d’environnement du fichier de certificat, du fichier de clé privée et de la phrase secrète.
set X509_CERT_FILE=./device-cert.pem set X509_KEY_FILE=./device-key.pem set PASS_PHRASE=1234
Passez en revue le code pour provision_x509.py. Si vous n’utilisez pas Python version 3.7 ou une version ultérieure, changez le code indiqué ici pour remplacer
asyncio.run(main())
, et enregistrez vos modifications.Exécutez l’exemple. L’exemple se connecte à DPS, qui provisionne l’appareil sur un hub IoT. Une fois l’appareil provisionné, l’exemple envoie des messages de test au hub IoT.
$ python azure-iot-sdk-python/samples/async-hub-scenarios/provision_x509.py RegistrationStage(RequestAndResponseOperation): Op will transition into polling after interval 2. Setting timer. The complete registration result is my-x509-device TestHub12345.azure-devices.net initialAssignment null Will send telemetry from the provisioned device sending message #4 sending message #7 sending message #2 sending message #8 sending message #5 sending message #9 sending message #1 sending message #6 sending message #10 sending message #3 done sending message #4 done sending message #7 done sending message #2 done sending message #8 done sending message #5 done sending message #9 done sending message #1 done sending message #6 done sending message #10 done sending message #3
Dans cette section, vous utilisez votre invite de commandes Windows et votre invite Git Bash.
Dans le portail Azure, sélectionnez l’onglet Vue d’ensemble de votre service Device Provisioning.
Copiez les valeurs Étendue de l’ID et Point de terminaison d’appareil global.
Dans l’invite de commandes Windows, accédez au dossier de l’exemple de projet. Le chemin d’accès affiché est relatif à l’emplacement où vous avez cloné le Kit de développement logiciel (SDK).
cd .\azure-iot-sdk-java\provisioning\provisioning-device-client-samples\provisioning-X509-sample
Entrez les informations relatives à l’identité X.509 et au service d’approvisionnement dans l’exemple de code. L’information est utilisée lors du provisionnement, pour l’attestation de l’appareil simulé, avant l’inscription de l’appareil.
Ouvrez le fichier
.\src\main\java\samples\com\microsoft\azure\sdk\iot\ProvisioningX509Sample.java
dans l’éditeur de votre choix.Mettez à jour les valeurs suivantes avec l’ID de l’étendue et le point de terminaison global du service d’approvisionnement que vous avez copiés précédemment.
private static final String idScope = "[Your ID scope here]"; private static final String globalEndpoint = "[Your Provisioning Service Global Endpoint here]"; private static final ProvisioningDeviceClientTransportProtocol PROVISIONING_DEVICE_CLIENT_TRANSPORT_PROTOCOL = ProvisioningDeviceClientTransportProtocol.HTTPS;
Mettez à jour la valeur de la chaîne constante
leafPublicPem
avec la valeur de votre certificat, device-cert.pem.La syntaxe du texte du certificat doit suivre le modèle suivant, sans espace ni caractère supplémentaire.
private static final String leafPublicPem = "-----BEGIN CERTIFICATE-----\n" + "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n" + ... "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n" + "-----END CERTIFICATE-----";
La mise à jour manuelle de cette valeur de chaîne peut être sujette à des erreurs. Pour générer la syntaxe appropriée, vous pouvez copier et coller la commande suivante dans votre invite Git Bash, puis appuyez sur Entrée. Cette commande génère la syntaxe de la valeur de constante de chaîne
leafPublicPem
et l’écrit dans la sortie.sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' device-cert.pem
Copiez et collez le texte du certificat de sortie pour la valeur de constante.
Mettez à jour la valeur de chaîne de la constante
leafPrivateKey
avec la clé privée non chiffrée pour votre certificat d’appareil, unencrypted-device-key.pem.La syntaxe du texte de la clé privée doit suivre le modèle suivant, sans espace ni caractère supplémentaire.
private static final String leafPrivateKey = "-----BEGIN PRIVATE KEY-----\n" + "MIIJJwIBAAKCAgEAtjvKQjIhp0EE1PoADL1rfF/W6v4vlAzOSifKSQsaPeebqg8U\n" + ... "X7fi9OZ26QpnkS5QjjPTYI/wwn0J9YAwNfKSlNeXTJDfJ+KpjXBcvaLxeBQbQhij\n" + "-----END PRIVATE KEY-----";
La mise à jour manuelle de cette valeur de chaîne peut être sujette à des erreurs. Pour générer la syntaxe appropriée, vous pouvez copier et coller la commande suivante dans votre invite Git Bash, puis appuyez sur Entrée. Cette commande génère la syntaxe de la valeur de constante de chaîne
leafPrivateKey
et l’écrit dans la sortie.sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' unencrypted-device-key.pem
Copiez et collez le texte de la clé privée de sortie pour la valeur de constante.
Enregistrez vos modifications.
Générez l’exemple, puis accédez au dossier
target
.mvn clean install cd target
La génération crée le fichier .jar dans le dossier
target
avec le format de fichier suivant :provisioning-x509-sample-{version}-with-deps.jar
; par exemple :provisioning-x509-sample-1.8.1-with-deps.jar
. Exécutez le fichier .jar. Vous devrez peut-être remplacer la version dans la commande suivant.java -jar ./provisioning-x509-sample-1.8.1-with-deps.jar
L’exemple se connecte à DPS, qui provisionne l’appareil sur un hub IoT. Une fois l’appareil provisionné, l’exemple envoie des messages de test au hub IoT.
Starting... Beginning setup. WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance. 2022-05-11 09:42:05,025 DEBUG (main) [com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClient] - Initialized a ProvisioningDeviceClient instance using SDK version 2.0.0 2022-05-11 09:42:05,027 DEBUG (main) [com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClient] - Starting provisioning thread... Waiting for Provisioning Service to register 2022-05-11 09:42:05,030 INFO (global.azure-devices-provisioning.net-6255a8ba-CxnPendingConnectionId-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Opening the connection to device provisioning service... 2022-05-11 09:42:05,252 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Connection to device provisioning service opened successfully, sending initial device registration message 2022-05-11 09:42:05,286 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-RegisterTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.RegisterTask] - Authenticating with device provisioning service using x509 certificates 2022-05-11 09:42:06,083 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Waiting for device provisioning service to provision this device... 2022-05-11 09:42:06,083 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Current provisioning status: ASSIGNING Waiting for Provisioning Service to register 2022-05-11 09:42:15,685 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Device provisioning service assigned the device successfully IotHUb Uri : MyExampleHub.azure-devices.net Device ID : java-device-01 2022-05-11 09:42:25,057 INFO (main) [com.microsoft.azure.sdk.iot.device.transport.ExponentialBackoffWithJitter] - NOTE: A new instance of ExponentialBackoffWithJitter has been created with the following properties. Retry Count: 2147483647, Min Backoff Interval: 100, Max Backoff Interval: 10000, Max Time Between Retries: 100, Fast Retry Enabled: true 2022-05-11 09:42:25,080 INFO (main) [com.microsoft.azure.sdk.iot.device.transport.ExponentialBackoffWithJitter] - NOTE: A new instance of ExponentialBackoffWithJitter has been created with the following properties. Retry Count: 2147483647, Min Backoff Interval: 100, Max Backoff Interval: 10000, Max Time Between Retries: 100, Fast Retry Enabled: true 2022-05-11 09:42:25,087 DEBUG (main) [com.microsoft.azure.sdk.iot.device.DeviceClient] - Initialized a DeviceClient instance using SDK version 2.0.3 2022-05-11 09:42:25,129 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection] - Opening MQTT connection... 2022-05-11 09:42:25,150 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sending MQTT CONNECT packet... 2022-05-11 09:42:25,982 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sent MQTT CONNECT packet was acknowledged 2022-05-11 09:42:25,983 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sending MQTT SUBSCRIBE packet for topic devices/java-device-01/messages/devicebound/# 2022-05-11 09:42:26,068 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sent MQTT SUBSCRIBE packet for topic devices/java-device-01/messages/devicebound/# was acknowledged 2022-05-11 09:42:26,068 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection] - MQTT connection opened successfully 2022-05-11 09:42:26,070 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - The connection to the IoT Hub has been established 2022-05-11 09:42:26,071 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Updating transport status to new status CONNECTED with reason CONNECTION_OK 2022-05-11 09:42:26,071 DEBUG (main) [com.microsoft.azure.sdk.iot.device.DeviceIO] - Starting worker threads 2022-05-11 09:42:26,073 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Invoking connection status callbacks with new status details 2022-05-11 09:42:26,074 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Client connection opened successfully 2022-05-11 09:42:26,075 INFO (main) [com.microsoft.azure.sdk.iot.device.DeviceClient] - Device client opened successfully Sending message from device to IoT Hub... 2022-05-11 09:42:26,077 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Message was queued to be sent later ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) Press any key to exit... 2022-05-11 09:42:26,079 DEBUG (MyExampleHub.azure-devices.net-java-device-01-ee6c362d-Cxn7a1fb819-e46d-4658-9b03-ca50c88c0440-azure-iot-sdk-IotHubSendTask) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Sending message ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) 2022-05-11 09:42:26,422 DEBUG (MQTT Call: java-device-01) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - IotHub message was acknowledged. Checking if there is record of sending this message ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) 2022-05-11 09:42:26,425 DEBUG (MyExampleHub.azure-devices.net-java-device-01-ee6c362d-Cxn7a1fb819-e46d-4658-9b03-ca50c88c0440-azure-iot-sdk-IotHubSendTask) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Invoking the callback function for sent message, IoT Hub responded to message ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) with status OK Message sent!
Confirmer l’inscription du provisionnement de votre appareil
Pour connaître le hub IoT sur lequel votre appareil a été approvisionné, examinez les détails de l’inscription individuelle que vous avez créée précédemment :
Dans le Portail Azure, accédez au service d’approvisionnement des appareils.
Dans le menu Paramètres, sélectionnez Gérer les inscriptions.
Sélectionnez Inscriptions individuelles. L’entrée d’inscription X.509 que vous avez créée précédemment, my-x509-device, doit apparaître dans la liste.
Sélectionnez l’entrée d’inscription. Le hub IoT auquel votre appareil a été attribué et son ID d’appareil apparaît sous État d’inscription.
Pour vérifier l’appareil dans votre hub IoT :
Dans le Portail Azure, accédez au hub IoT auquel votre appareil a été attribué.
Dans le menu Gestion des périphériques, sélectionnez Appareils.
Si votre appareil a été approvisionné correctement, son ID d’appareil, my-x509-device, doit apparaître dans la liste, avec l’État défini sur Activé. Si vous ne voyez pas votre appareil, sélectionnez Actualiser.
Important
Si vous avez modifié la valeur par défaut de l’état du jumeau d’appareil initial dans l’entrée d’inscription de votre appareil, l’état du jumeau souhaité peut être extrait du hub et agir en conséquence. Pour en savoir plus, consultez Comprendre et utiliser les jumeaux d’appareil IoT Hub
Nettoyer les ressources
Si vous envisagez de continuer à manipuler et à explorer l’exemple de client d’appareil, ne nettoyez pas les ressources créées dans ce guide de démarrage rapide. Sinon, effectuez les étapes suivantes pour supprimer toutes les ressources créées par ce guide de démarrage rapide.
Supprimer l’inscription de votre appareil
Fermez la fenêtre de sortie de l’exemple de client d’appareil sur votre machine.
Dans le menu de gauche du portail Azure, sélectionnez Toutes les ressources.
Sélectionnez votre service Device Provisioning.
Dans le menu Paramètres, sélectionnez Gérer les inscriptions.
Sélectionnez l’onglet Inscriptions individuelles.
Cochez la case à côté de l’ID d’inscription de l’appareil que vous avez inscrit dans ce guide de démarrage rapide.
En haut de la page, sélectionnez Supprimer.
Supprimer l’inscription de votre appareil dans IoT Hub
Dans le menu de gauche du portail Azure, sélectionnez Toutes les ressources.
Sélectionnez votre hub IoT.
Dans le menu Explorateurs, sélectionnez Appareils IoT.
Cochez la case à côté de l’ID d’appareil de l’appareil que vous avez inscrit dans ce guide de démarrage rapide.
En haut de la page, sélectionnez Supprimer.
Étapes suivantes
Dans ce démarrage rapide, vous avez approvisionné un seul appareil sur votre hub IoT à l’aide d’une inscription individuelle. Ensuite, découvrez comment approvisionner de nombreux appareils sur plusieurs hubs.