HTTPS - AWS IoT Core

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

HTTPS

Les clients peuvent publier des messages en adressant des demandes à l'API REST à l'aide des protocoles HTTP 1.0 ou 1.1. Pour connaître l'authentification et les mappages de port utilisés par les demandes HTTP, veuillez consulter Protocols, port mappings, and authentication (Protocoles, mappages de ports et authentification).

Note

HTTPS ne prend pas en charge une valeur clientId comme le fait MQTT. clientId est disponible lors de l'utilisation de MQTT, mais pas disponible lors de l'utilisation de HTTPS.

URL du message HTTPS

Les appareils et les clients publient leurs messages en envoyant des requêtes POST à un point de terminaison spécifique au client et à une URL spécifique au sujet :

https://IoT_data_endpoint/topics/url_encoded_topic_name?qos=1
  • IOT_Data_Endpoint est le point de terminaison des données de l'appareil. AWS IoT Vous pouvez trouver le point de terminaison dans la AWS IoT console sur la page de détails de l'objet ou sur le client à l'aide de la AWS CLI commande :

    aws iot describe-endpoint --endpoint-type iot:Data-ATS

    Le point de terminaison doit ressembler à ceci : a3qjEXAMPLEffp-ats.iot.us-west-2.amazonaws.com

  • <url_encoded_topic_name> est le nom de rubrique complet du message envoyé.

Exemples de code de message HTTPS

Voici comment envoyer un message HTTPS à AWS IoT.

Python (port 8443)
import requests import argparse # define command-line parameters parser = argparse.ArgumentParser(description="Send messages through an HTTPS connection.") parser.add_argument('--endpoint', required=True, help="Your AWS IoT data custom endpoint, not including a port. " + "Ex: \"abcdEXAMPLExyz-ats.iot.us-east-1.amazonaws.com\"") parser.add_argument('--cert', required=True, help="File path to your client certificate, in PEM format.") parser.add_argument('--key', required=True, help="File path to your private key, in PEM format.") parser.add_argument('--topic', required=True, default="test/topic", help="Topic to publish messages to.") parser.add_argument('--message', default="Hello World!", help="Message to publish. " + "Specify empty string to publish nothing.") # parse and load command-line parameter values args = parser.parse_args() # create and format values for HTTPS request publish_url = 'https://' + args.endpoint + ':8443/topics/' + args.topic + '?qos=1' publish_msg = args.message.encode('utf-8') # make request publish = requests.request('POST', publish_url, data=publish_msg, cert=[args.cert, args.key]) # print results print("Response status: ", str(publish.status_code)) if publish.status_code == 200: print("Response body:", publish.text)
Python (port 443)
import requests import http.client import json import ssl ssl_context = ssl.SSLContext(protocol=ssl.PROTOCOL_TLS_CLIENT) ssl_context.minimum_version = ssl.TLSVersion.TLSv1_2 # note the use of ALPN ssl_context.set_alpn_protocols(["x-amzn-http-ca"]) ssl_context.load_verify_locations(cafile="./<root_certificate>") # update the certificate and the AWS endpoint ssl_context.load_cert_chain("./<certificate_in_PEM_Format>", "<private_key_in_PEM_format>") connection = http.client.HTTPSConnection('<the ats IoT endpoint>', 443, context=ssl_context) message = {'data': 'Hello, I'm using TLS Client authentication!'} json_data = json.dumps(message) connection.request('POST', '/topics/device%2Fmessage?qos=1', json_data) # make request response = connection.getresponse() # print results print(response.read().decode())
CURL

Vous pouvez utiliser curl à partir d'un client ou d'un appareil pour envoyer un message à AWS IoT.

Pour utiliser curl pour envoyer un message depuis un appareil AWS IoT client
  1. Vérifiez la version curl.

    1. Sur votre client, exécutez cette commande à partir d’une invite de commande.

      curl --help

      Dans le texte d'aide, recherchez les options TLS. Vous devriez voir l'option --tlsv1.2.

    2. Si vous voyez l' option --tlsv1.2, continuez.

    3. Si vous ne voyez pas l'option --tlsv1.2 ou si vous obtenez une erreur command not found, vous devrez peut-être mettre à jour ou installer curl sur votre client ou l'installer opensslavant de continuer.

  2. Installez les certificats sur votre client.

    Copiez les fichiers de certificat que vous avez créés lorsque vous avez enregistré votre client (objet) dans la AWS IoT console. Assurez-vous d'avoir ces trois fichiers de certificat sur votre client avant de continuer.

    • Le fichier du certificat CA (Amazon-Root-CA-1.pem dans cet exemple).

    • Le fichier de certificat du client (device.pem.crt dans cet exemple).

    • Le fichier de clé privée du client (private.pem.key dans cet exemple).

  3. Créez la ligne de commande curl en remplaçant les valeurs remplaçables par celles de votre compte et de votre système.

    curl --tlsv1.2 \ --cacert Amazon-root-CA-1.pem \ --cert device.pem.crt \ --key private.pem.key \ --request POST \ --data "{ \"message\": \"Hello, world\" }" \ "https://IoT_data_endpoint:8443/topics/topic?qos=1"
    --tlsv1.2

    Utilisez TLS 1.2 (SSL).

    --cacert Amazon-root-CA-1.pem

    Nom et chemin d’accès du fichier de certificat d'autorité de certification, si nécessaire, pour vérifier l'appairage.

    --cert device.pem.crt

    Nom et chemin d’accès du fichier de certificat du client, si nécessaire.

    --clé private.pem.key

    Nom et chemin d’accès du fichier de clé privée du client, si nécessaire.

    --demande POST

    Type de demande HTTP (dans le cas présent, POST).

    --data "{ \"message\": \"Hello, world\" }"

    Données POST HTTP que vous souhaitez publier. Dans ce cas, il s'agit d'une chaîne JSON, avec les guillemets internes échappés à l’aide du caractère de barre oblique inverse (\).

    "https://IoT_data_endpoint:8443/topics/topic?qos=1"

    L'URL du point de terminaison des données de l' AWS IoT appareil de votre client:8443, suivie du port HTTPS, qui est ensuite suivi du mot clé /topics/ et du nom du sujettopic, dans ce cas. Spécifiez la qualité du service en tant que paramètre de requête, ?qos=1.

  4. Ouvrez le client de test MQTT dans la AWS IoT console.

    Suivez les instructions dans Afficher les messages MQTT avec le client AWS IoT MQTT et configurez la console pour vous abonner aux messages portant le nom de la rubrique utilisée dans votre commande curl, ou utilisez le filtre de rubrique générique #.

  5. Testez la commande.

    Lors de la surveillance de la rubrique dans le client de test de la console AWS IoT , accédez à votre client et émettez la ligne de commande curl que vous avez créée à l'étape 3. Vous devriez voir les messages de votre client dans la console.