Guide pratique pour utiliser des certificats X.509 via HTTPS sans SDK

Dans cet article pratique, vous allez provisionner un appareil avec des certificats X.509 via HTTPS sans utiliser de SDK d’appareil Azure IoT DPS. La plupart des langages fournissent des bibliothèques pour envoyer des demandes HTTP, mais, au lieu de vous concentrer sur un langage spécifique, dans cet article, vous allez utiliser l’outil en ligne de commande cURL pour les opérations d’envoi et de réception via HTTPS.

Vous pouvez suivre les étapes décrites dans cet article sur une machine Linux ou Windows. Si vous opérez sur le Sous-système Windows pour Linux (WSL) ou sur une machine Linux, vous pouvez entrer toutes les commandes sur votre système local dans une invite Bash. Si vous opérez sur Windows, entrez toutes les commandes sur votre système local dans une invite GitBash.

Cet article comporte plusieurs voies en fonction du type d’entrée d’inscription et du ou des certificats X.509 que vous choisissez d’utiliser. Après avoir installé les prérequis, veillez à lire la Vue d’ensemble avant de continuer.

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.

  • Assurez-vous que Python version 3.7 ou ultérieure est installé sur votre machine. Vous pouvez vérifier votre version de Python en exécutant python --version ou python3 --version.

  • Si vous opérez sur Windows, 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. Sur Windows, vous allez entrer toutes les commandes sur votre système local dans une invite GitBash.

  • Azure CLI. Vous avez le choix entre deux options pour exécuter les commandes Azure CLI dans cet article :

    • Utilisez Azure Cloud Shell, un interpréteur de commandes interactif qui exécute des commandes CLI dans votre navigateur. Cette option est recommandée, car vous n’avez pas besoin d’installer quoi que ce soit. Si vous utilisez Cloud Shell pour la première fois, connectez-vous au portail Azure. Suivez les étapes décrites dans Démarrage rapide de Cloud Shell pour démarrer Cloud Shell et sélectionner l’environnement Bash.
    • Si vous le souhaitez, exécutez Azure CLI sur votre ordinateur local. Si l’interface de ligne de commande Azure est déjà installée, exécutez az upgrade pour la mettre à niveau, ainsi que les extensions, vers la version actuelle. Pour installer l’interface de ligne de commande Azure, consultez Installer l’interface de ligne de commande Azure.
  • Si vous opérez dans un environnement Linux ou WSL, ouvrez une invite Bash pour exécuter les commandes localement. Si vous opérez dans un environnement Windows, ouvrez une invite GitBash.

Vue d’ensemble

Trois scénarios sont abordés dans cet article et les étapes initiales que vous allez effectuer diffèrent de l’un à l’autre. Si vous souhaitez :

Une fois que vous avez effectué les étapes du scénario choisi, vous passer à l’étape Inscrire votre appareil et Envoyer un message de télémétrie.

Créer un certificat d’appareil

Dans le cadre de cet article, vous allez utiliser un certificat X.509 pour vous authentifier auprès de DPS en utilisant une inscription individuelle ou un groupe d’inscriptions.

Si vous utilisez une inscription individuelle, vous pouvez utiliser un certificat X.509 auto-signé ou une chaîne de certificats composée du certificat d’appareil et d’un ou plusieurs certificats de signature. Si vous utilisez un groupe d’inscriptions, vous devez utiliser une chaîne de certificats.

Important

Pour l’authentification d’inscription X.509, le nom commun de l’objet (CN) du certificat d’appareil est utilisé comme ID d’inscription pour l’appareil. 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 ('-'). DPS prend en charge les ID d’inscription jusqu’à 128 caractères ; toutefois, le nom commun de l’objet d’un certificat X.509 est limité à 64 caractères. Si vous changez le nom commun de l’objet de votre certificat d’appareil dans les étapes suivantes, assurez-vous qu’il respecte ce format.

Utiliser un certificat auto-signé

Pour créer un certificat auto-signé à utiliser avec une inscription individuelle, accédez à un répertoire dans lequel vous souhaitez créer votre certificat et procédez comme suit :

  1. 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.

  2. Quand vous êtes invité à entrer la phrase secrète PEM, utilisez la phrase secrète 1234.

  3. 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.

    Le fichier de clé privée est protégé par la phrase secrète : 1234.

  4. Le fichier de certificat est encodé en Base64. Pour afficher le nom commun (CN) de l’objet et d’autres propriétés du fichier de certificat, entrez la commande suivante :

    winpty openssl x509 -in device-cert.pem -text -noout
    
    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
    

Utiliser une chaîne de certificats

Si vous utilisez un groupe d’inscriptions, vous devez vous authentifier avec une chaîne de certificats. Avec une inscription individuelle, vous pouvez utiliser une chaîne de certificats ou un certificat auto-signé.

Pour créer une chaîne de certificats, suivez les instructions fournies dans Créer une chaîne de certificats X.509. Vous n’avez besoin que d’un seul appareil dans le cadre de cet article. Vous pouvez donc vous arrêter après avoir créé la clé privée et la chaîne de certificats pour le premier appareil.

Quand vous avez terminé, vous devez disposer des fichiers suivants :

Certificat Fichier Description
Certificat d’autorité de certification racine. certs/azure-iot-test-only.root.ca.cert.pem Sera chargé sur DPS et vérifié.
Certificat d’autorité de certification intermédiaire certs/azure-iot-test-only.intermediate.cert.pem Sera utilisé pour créer un groupe d’inscription dans DPS.
Clé privée de device-01 private/device-01.key.pem Utilisée par l’appareil pour vérifier la propriété du certificat d’appareil lors de l’authentification avec DPS.
Certificat device-01 certs/device-01.cert.pem Permet de créer une entrée d’inscription individuelle avec DPS.
Certificat de chaîne complète pour device-01 certs/device-01-full-chain.cert.pem Présentée par l’appareil pour s’authentifier et s’inscrire auprès de DPS.

Utiliser une inscription individuelle

Pour créer une inscription individuelle à utiliser dans le cadre de cet article, utilisez la commande az iot dps enrollment create.

La commande suivante crée une entrée d’inscription individuelle avec la stratégie d’allocation par défaut pour votre instance DPS en utilisant le certificat d’appareil que vous spécifiez.

az iot dps enrollment create -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id} --attestation-type x509 --certificate-path {path to your certificate}
  • Substituez le nom de votre groupe de ressources et de votre instance DPS.

  • L’ID d’inscription est l’ID d’inscription de votre appareil et, pour les inscriptions X.509, doit correspondre au nom commun de l’objet (CN) du certificat d’appareil.

  • Le chemin de certificat est le chemin de votre certificat d’appareil.

Remarque

Si vous utilisez Cloud Shell pour exécuter les commandes Azure CLI, vous pouvez utiliser le bouton Charger pour charger votre fichier de certificat sur votre lecteur cloud avant d’exécuter la commande.

Capture d’écran montrant le bouton Charger un fichier dans Azure Cloud Shell.

Utiliser un groupe d’inscriptions

Pour créer un groupe d’inscriptions à utiliser dans le cadre de cet article, utilisez la commande az iot dps enrollment-group create.

La commande suivante crée une entrée de groupe d’inscription avec la stratégie d’allocation par défaut pour votre instance DPS en utilisant un certificat d’autorité de certification intermédiaire :

az iot dps enrollment-group create -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id} --certificate-path {path_to_your_certificate}
  • Substituez le nom de votre groupe de ressources et de votre instance DPS.

  • L’ID d’inscription est une chaîne ne respectant pas la casse composée de caractères alphanumériques et des caractères spéciaux : '-', '.', '_', ':'. Le dernier caractère doit être alphanumérique ou être un tiret ('-'). Il peut s’agir de n’importe quel nom que vous choisissez d’utiliser pour le groupe d’inscriptions.

  • Le chemin de certificat est le chemin de votre certificat intermédiaire. Si vous avez suivi les instructions fournies dans Utiliser une chaîne de certificats, le nom de fichier est certs/azure-iot-test-only.intermediate.cert.pem.

Remarque

Si vous utilisez Cloud Shell pour exécuter les commandes Azure CLI, vous pouvez utiliser le bouton Charger pour charger votre fichier de certificat sur votre lecteur cloud avant d’exécuter la commande.

Capture d’écran montrant le bouton Charger un fichier dans Azure Cloud Shell.

Remarque

Si vous préférez, vous pouvez créer un groupe d’inscriptions basé sur un certificat de signature qui a été chargé et vérifié avec DPS (voir la section suivante). Pour ce faire, vous spécifiez le nom du certificat avec le paramètre --ca-name et omettez le paramètre --certificate-path dans la commande az iot dps enrollment-group create.

Charger et vérifier un certificat de signature

Si vous utilisez une chaîne de certificats pour une inscription individuelle ou un groupe d’inscriptions, vous devez charger et vérifier au moins un certificat dans la chaîne de signature du certificat d’appareil dans DPS.

  • Pour une inscription individuelle, il peut s’agir de n’importe quel certificat de signature dans la chaîne de certificats de l’appareil.

  • Pour un groupe d’inscriptions, il peut s’agir du certificat défini sur le groupe d’inscriptions ou de n’importe quel certificat dans sa chaîne de signature jusqu’au certificat d’autorité de certification racine compris.

Pour charger et vérifier votre certificat, utilisez la commande az iot dps certificate create :

az iot dps certificate create -g {resource_group_name} --dps-name {dps_name} --certificate-name {friendly_name_for_your_certificate} --path {path_to_your_certificate} --verified true
  • Substituez le nom de votre groupe de ressources et de votre instance DPS.

  • Le chemin de certificat est le chemin de votre certificat de signature. Dans le cadre de cet article, nous vous recommandons de charger le certificat d’autorité de certification racine. Si vous avez suivi les instructions fournies dans Utiliser une chaîne de certificats, le nom de fichier est certs/azure-iot-test-only.root.ca.cert.pem.

  • Le nom du certificat ne peut contenir que des caractères alphanumériques ou les caractères spéciaux suivants : -._. Aucun espace blanc n’est autorisé. Par exemple, « azure-iot-test-only-root ».

Remarque

Si vous utilisez Cloud Shell pour exécuter les commandes Azure CLI, vous pouvez utiliser le bouton Charger pour charger votre fichier de certificat sur votre lecteur cloud avant d’exécuter la commande.

Capture d’écran montrant le bouton Charger un fichier dans Azure Cloud Shell.

Remarque

Les étapes décrites dans cette section permettent de vérifier automatiquement le certificat lors du chargement. Vous pouvez également effectuer une vérification manuelle du certificat. Pour plus d’informations, consultez Vérification manuelle de l’autorité de certification racine ou intermédiaire.

Inscrire votre appareil

Vous appelez l’API REST Inscrire un appareil pour provisionner votre appareil par le biais de DPS.

Utilisez la commande curl suivante :

curl -L -i -X PUT --cert [path_to_your_device_cert] --key [path_to_your_device_private_key] -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"registrationId": "[registration_id]"}' https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/register?api-version=2019-03-31

Où :

  • -L indique à curl de suivre les redirections HTTP.

  • –i indique à curl d’inclure les en-têtes de protocole dans la sortie. Ces en-têtes ne sont pas absolument nécessaires, mais ils peuvent être utiles.

  • -X PUT indique à curl qu’il s’agit d’une commande HTTP PUT. Requis pour cet appel d’API.

  • --cert [path_to_your_device_cert] indique à curl où trouver le certificat X.509 de votre appareil. Si votre clé privée d’appareil est protégée par une phrase secrète, vous pouvez ajouter celle-ci après le chemin du certificat, précédée d’un signe deux-points, par exemple : --cert my-device.pem:1234.

    • Si vous utilisez un certificat auto-signé, votre fichier de certificat d’appareil ne contient qu’un seul certificat X.509. Si vous avez suivi les instructions fournies dans Utiliser un certificat auto-signé, le nom de fichier est device-cert.pem et la phrase secrète de la clé privée est 1234 ; utilisez donc --cert device-cert.pem:1234.

    • Si vous utilisez une chaîne de certificats, par exemple, lors de l’authentification par le biais d’un groupe d’inscriptions, votre fichier de certificat d’appareil doit contenir une chaîne de certificats valide. La chaîne de certificats doit inclure le certificat d’appareil et tous les certificats de signature y compris un certificat vérifié. Si vous avez suivi les instructions fournies dans Utiliser une chaîne de certificats pour créer la chaîne de certificats, le chemin du fichier est certs/device-01-full-chain.cert.pem ; utilisez donc --cert certs/device-01-full-chain.cert.pem.

  • --key [path_to_your_device_private_key] indique à curl où trouver la clé privée de votre appareil.

    • Si vous avez suivi les instructions fournies dans Utiliser un certificat auto-signé, le nom de fichier est device-key.pem ; utilisez donc --key device-cert.pem:1234.

    • Si vous avez suivi les instructions fournies dans Utiliser une chaîne de certificats, le chemin de la clé est certs/device-01-full-chain.cert.pem ; utilisez donc --cert certs/device-01-full-chain.cert.pem.

  • -H 'Content-Type: application/json' indique à DPS que nous envoyons du contenu JSON et que le type doit être « application/json »

  • -H 'Content-Encoding: utf-8' indique à DPS l’encodage que nous utilisons pour le corps de notre message. Définissez la valeur appropriée pour votre système d’exploitation/client ; toutefois, il s’agit généralement de utf-8.

  • -d '{"registrationId": "[registration_id]"}' : le paramètre –d représente les « données » ou le corps du message que nous envoyons. Ce doit être du JSON, sous la forme '{"registrationId":"[registration_id"}'. Notez que pour curl, il est placé entre guillemets simples ; si, à la place, vous utilisez des guillemets doubles, vous devez, dans le JSON, faire précéder les guillemets doubles d’un caractère d’échappement. Pour l’inscription X.509, l’ID d’inscription est le nom commun de l’objet (CN) de votre certificat d’appareil.

  • Enfin, le dernier paramètre est l’URL à laquelle envoyer le contenu. Dans le cas d’une utilisation « normale » de DPS (c’est-à-dire non locale), le point de terminaison DPS global, global.azure-devices-provisioning.net, est utilisé : https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/register?api-version=2019-03-31. Notez que vous devez remplacer [dps_scope_id] et [registration_id] par les valeurs appropriées.

Par exemple :

  • Si vous avez suivi les instructions fournies dans Utiliser un certificat auto-signé :

    curl -L -i -X PUT --cert device-cert.pem:1234 --key device-key.pem -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"registrationId": "my-x509-device"}' https://global.azure-devices-provisioning.net/0ne00111111/registrations/my-x509-device/register?api-version=2021-06-01
    
  • Si vous avez suivi les instructions fournies dans Utiliser une chaîne de certificats :

    curl -L -i -X PUT --cert certs/device-01-full-chain.cert.pem --key private/device-01.key.pem -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"registrationId": "device-01"}' https://global.azure-devices-provisioning.net/0ne00111111/registrations/device-01/register?api-version=2021-06-01
    

Un appel réussi a une réponse similaire à ce qui suit :

HTTP/1.1 202 Accepted
Date: Sat, 27 Aug 2022 17:53:18 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Location: https://global.azure-devices-provisioning.net/0ne00111111/registrations/my-x509-device/register
Retry-After: 3
x-ms-request-id: 05cdec07-c0c7-48f3-b3cd-30cfe27cbe57
Strict-Transport-Security: max-age=31536000; includeSubDomains

{"operationId":"5.506603669bd3e2bf.b3602f8f-76fe-4341-9214-bb6cfb891b8a","status":"assigning"}

La réponse contient un ID d’opération et un état. En l’occurrence, l’état est défini sur assigning. L’inscription DPS est potentiellement une opération de longue durée. Elle est donc effectuée de manière asynchrone. En règle générale, vous interrogez l’état avec l’API REST Recherche de l’état de l’opération pour déterminer quand votre appareil a été attribué ou si une défaillance s’est produite.

Les valeurs d’état valides pour DPS sont les suivantes :

  • assigned : la valeur retournée de l’appel d’état indique à quel hub IoT l’appareil a été attribué.

  • assigning : l’opération est toujours en cours.

  • disabled : l’enregistrement d’inscription est désactivé dans DPS ; l’appareil ne peut donc pas être attribué.

  • failed : l’attribution a échoué. Un errorCode et un errorMessage sont retournés dans un enregistrement registrationState dans la réponse pour indiquer ce qui a échoué.

  • unassigned

Pour appeler l’API Recherche de l’état de l’opération, utilisez la commande curl suivante :

curl -L -i -X GET --cert [path_to_your_device_cert] --key [path_to_your_device_private_key] -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/operations/[operation_id]?api-version=2019-03-31

Vous utilisez les mêmes étendue d’ID, ID d’inscription, certificat et clé que ceux que vous avez utilisés dans la demande Inscrire un appareil. Utilisez l’ID d’opération qui a été retourné dans la réponse Inscrire un appareil.

Par exemple, la commande suivante concerne le certificat auto-signé créé dans Utiliser un certificat auto-signé. (Vous devez modifier l’étendue de l’ID et l’ID d’opération.)

curl -L -i -X GET --cert ./device-certPUT --cert device-cert.pem:1234 --key device-key.pem -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' https://global.azure-devices-provisioning.net/0ne00111111/registrations/my-x509-device/operations/5.506603669bd3e2bf.b3602f8f-76fe-4341-9214-bb6cfb891b8a?api-version=2021-06-01

La sortie suivante montre la réponse pour un appareil qui a été attribué avec succès. Notez que la propriété status est assigned et que la propriété registrationState.assignedHub est définie sur le hub IoT où l’appareil a été provisionné.

HTTP/1.1 200 OK
Date: Sat, 27 Aug 2022 18:10:49 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
x-ms-request-id: 8f211bc5-3ed8-4c8b-9a79-e003e756e9e4
Strict-Transport-Security: max-age=31536000; includeSubDomains

{
   "operationId":"5.506603669bd3e2bf.b3602f8f-76fe-4341-9214-bb6cfb891b8a",
   "status":"assigned",
   "registrationState":{
      "x509":{
         
      },
      "registrationId":"my-x509-device",
      "createdDateTimeUtc":"2022-08-27T17:53:19.5143497Z",
      "assignedHub":"MyExampleHub.azure-devices.net",
      "deviceId":"my-x509-device",
      "status":"assigned",
      "substatus":"initialAssignment",
      "lastUpdatedDateTimeUtc":"2022-08-27T17:53:19.7519141Z",
      "etag":"IjEyMDA4NmYyLTAwMDAtMDMwMC0wMDAwLTYzMGE1YTBmMDAwMCI="
   }
}

Notez l’ID de l’appareil et le hub IoT attribué. Vous les utiliserez pour envoyer un message de télémétrie dans la section suivante.

Envoyer un message de télémétrie

Vous appelez l’API REST Envoyer un événement d’appareil IoT Hub pour envoyer de la télémétrie à l’appareil.

Utilisez la commande curl suivante :

curl -L -i -X POST --cert [path_to_your_device_cert] --key [path_to_your_device_private_key] -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"temperature": 30}' https://[assigned_iot_hub_name].azure-devices.net/devices/[device_id]/messages/events?api-version=2020-03-13

Où :

  • -X POST indique à curl qu’il s’agit d’une commande HTTP POST. Requis pour cet appel d’API.

  • --cert [path_to_your_device_cert] indique à curl où trouver le certificat X.509 de votre appareil. Si votre clé privée d’appareil est protégée par une phrase secrète, vous pouvez ajouter celle-ci après le chemin du certificat, précédée d’un signe deux-points, par exemple : --cert my-device.pem:1234.

    • Si vous utilisez un certificat auto-signé, votre fichier de certificat d’appareil ne contient qu’un seul certificat X.509. Si vous avez suivi les instructions fournies dans Utiliser un certificat auto-signé, le nom de fichier est device-cert.pem et la phrase secrète de la clé privée est 1234 ; utilisez donc --cert device-cert.pem:1234.

    • Si vous utilisez une chaîne de certificats, votre fichier de certificat d’appareil doit contenir une chaîne de certificats valide. Si vous avez suivi les instructions fournies dans Utiliser une chaîne de certificats pour créer la chaîne de certificats, le chemin du fichier est certs/device-01-full-chain.cert.pem ; utilisez donc --cert certs/device-01-full-chain.cert.pem.

  • --key [path_to_your_device_private_key] indique à curl où trouver la clé privée de votre appareil.

    • Si vous avez suivi les instructions fournies dans Utiliser un certificat auto-signé, le nom de fichier est device-key.pem ; utilisez donc --key device-cert.pem:1234.

    • Si vous avez suivi les instructions fournies dans Utiliser une chaîne de certificats, le chemin de la clé est certs/device-01-full-chain.cert.pem ; utilisez donc --cert certs/device-01-full-chain.cert.pem.

  • -H 'Content-Type: application/json' indique à IoT Hub que nous envoyons du contenu JSON et que le type doit être « application/json ».

  • -H 'Content-Encoding: utf-8' indique à IoT Hub l’encodage que nous utilisons pour le corps de notre message. Définissez la valeur appropriée pour votre système d’exploitation/client ; toutefois, il s’agit généralement de utf-8.

  • -d '{"temperature": 30}' : le paramètre –d représente les « données » ou le corps du message que nous envoyons. Dans le cadre de cet article, nous envoyons un seul point de données de température. Le type de contenu a été spécifié comme étant application/json. Ainsi, pour cette demande, le corps est en JSON. Notez que pour curl, il est placé entre guillemets simples ; si, à la place, vous utilisez des guillemets doubles, vous devez, dans le JSON, faire précéder les guillemets doubles d’un caractère d’échappement.

  • Le dernier paramètre est l’URL à laquelle envoyer le contenu. Pour l’API Envoyer un événement d’appareil, l’URL est : https://[assigned_iot_hub_name].azure-devices.net/devices/[device_id]/messages/events?api-version=2020-03-13.

    • Remplacez [assigned_iot_hub_name] par le nom du hub IoT auquel votre appareil a été attribué.

    • Remplacez [device_id] par l’ID d’appareil qui a été attribué quand vous avez inscrit votre appareil. Dans le cas des appareils provisionnés par le biais de groupes d’inscriptions, l’ID d’appareil est l’ID d’inscription. Pour les inscriptions individuelles, vous pouvez éventuellement spécifier un ID d’appareil différent de l’ID d’inscription dans l’entrée d’inscription.

Par exemple :

  • Si vous avez suivi les instructions fournies dans Utiliser un certificat auto-signé :

    curl -L -i -X POST --cert device-cert.pem:1234 --key device-key.pem -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"temperature": 30}' https://MyExampleHub.azure-devices.net/devices/my-x509-device/messages/events?api-version=2020-03-13
    
  • Si vous avez suivi les instructions fournies dans Utiliser une chaîne de certificats :

    curl -L -i -X POST --cert certs/device-01-full-chain.cert.pem --key private/device-01.key.pem -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"temperature": 30}' https://MyExampleHub.azure-devices.net/devices/my-x509-device/messages/events?api-version=2020-03-13
    

Un appel réussi a une réponse similaire à ce qui suit :

HTTP/1.1 204 No Content
Content-Length: 0
Vary: Origin
Server: Microsoft-HTTPAPI/2.0
x-ms-request-id: aa58c075-20d9-4565-8058-de6dc8524f14
Date: Wed, 31 Aug 2022 18:34:44 GMT

Étapes suivantes