HTTPS - AWS IoT Core

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

HTTPS

客户端可以通过RESTAPI使用 HTTP 1.0 或 1.1 协议向发出请求来发布消息。有关HTTP请求使用的身份验证和端口映射,请参见协议、端口映射和身份验证

注意

HTTPS不支持像这样的clientIdMQTT值。 clientId使用时可用MQTT,但使用时不可用HTTPS。

HTTPS消息 URL

设备和客户端通过向客户端特定的端点和特定主题发出POST请求来发布消息:URL

https://IoT_data_endpoint/topics/url_encoded_topic_name?qos=1
  • IoT_data_endpointAWS IoT 设备数据端点。您可以使用以下 AWS CLI 命令在 AWS IoT 控制台中的事物详细信息页面或客户端上找到终端节点:

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

    该终端节点看起来应如下所示:a3qjEXAMPLEffp-ats.iot.us-west-2.amazonaws.com

  • url_encoded_topic_name 是正在发送的消息的完整主题名称

HTTPS消息代码示例

以下是如何向发送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

您可以使用来自客户端或设备的 curl 向 AWS IoT发送消息。

使用 curl 从 AWS IoT 客户端设备发送消息
  1. 检查 curl 版本。

    1. 在客户端上,在命令提示符下运行此命令。

      curl --help

      在帮助文本中,查找TLS选项。您应看到 --tlsv1.2 选项。

    2. 如果您看到 --tlsv1.2 选项,请继续操作。

    3. 如果您没有看到 --tlsv1.2 选项或者收到 command not found 错误,则您可能需要先在客户端上更新或安装 curl,或者安装 openssl,然后再继续。

  2. 在客户端上安装证书。

    复制您在 AWS IoT 控制台中注册客户端(事物)时创建的证书文件。请先确保客户端上有这三个证书文件,然后再继续。

    • CA 证书文件 (Amazon-root-CA-1.pem 在这个例子中)。

    • 客户的证书文件 (device.pem.crt 在这个例子中)。

    • 客户的私钥文件 (private.pem.key 在这个例子中)。

  3. 创建 curl 命令行,并替换您的账户和系统的可替换值。

    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

    使用 TLS 1.2 (SSL)。

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

    用于验证对等方的 CA 证书的文件名和路径(如有必要)。

    --cert device.pem.crt

    客户端的证书文件名和路径(如有必要)。

    --key private.pem.key

    客户端的私有密钥文件名和路径(如有必要)。

    --请求 POST

    HTTP请求的类型(在本例中为POST)。

    --数据”{ \"message\": \"Hello, world\" }"

    您要发布HTTPPOST的数据。在本例中,它是一个JSON字符串,内部引号用反斜杠字符 (\) 进行转义。

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

    在本例中URL为客户端的 AWS IoT 设备数据端点:8443,然后是端HTTPS口,然后是关键字/topics/和主题名称。topic指定服务质量作为查询参数 ?qos=1

  4. 在 AWS IoT 控制台中打开MQTT测试客户端。

    按照中的使用 MQTT 客户端查看 AWS IoT MQTT 消息说明进行操作,将控制台配置为订阅主题名称为的消息 topic 在你的curl命令中使用,或者使用通配符主题过滤器。#

  5. 测试命令。

    在 AWS IoT 控制台的测试客户端中监控主题时,请转到客户端并发出您在步骤 3 中创建的 curl 命令行。控制台中应显示客户端的消息。