HTTPS - AWS IoT Core

HTTPS

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

注意

与 MQTT 不同,HTTPS 不支持 clientId 值。因此,虽然在使用 MQTT 时 clientId 可用,但在使用 HTTPS 时不可用。

HTTPS 消息 URL

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

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

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

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

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

HTTPS 消息代码示例

以下是一些如何向 AWS IoT 发送 HTTPS 消息的示例。

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

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

    --request POST

    HTTP 请求的类型(此示例中为 POST)。

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

    要发布的 HTTP POST 数据。在此示例中,它是一个 JSON 字符串,其内部引号通过反斜杠字符 (\) 进行转义。

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

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

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

    按照 使用 AWS IoT MQTT 客户端查看 MQTT 消息 中的说明执行操作,配置控制台以订阅消息,该消息应带有 curl 命令中所用的名为 topic 的主题,或使用 # 通配符主题筛选条件。

  5. 测试命令。

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