如何将 AWS 即时供应 (JITP) 嵌入您的微控制器 (运行 Freertos)

How to embed AWS Just In Time Provisioning (JITP) into your microcontroller (running Freertos)

我正在尝试在 amazon freertos 中获取一个应用程序 运行ning,它使用即时供应机制来允许供应一组设备。

我已经 运行 完成了 Espressif ESP32 设备 set up a demo application in freertos 的步骤。这工作正常,但它涉及有效地手动将您的凭据直接复制到源代码中,在您 运行 的脚本之一中。良好的概念证明,但不利于生产。

我已经在 AWS 后端单独 运行 通过 setting up JITP 的过程。最后一步是从 bash 手动调用 mosquitto 以发送虚假消息,模仿来自设备的 MQTT 传输。

这具有正确配置设备的效果。

我的问题是如何利用这些构建块构建多个硬件设备,并让它们全部配置并成功连接到 AWS IOT。

具体几点: 1. 哪些文件进入设备固件?我承认在加密和证书方面缺乏专业知识。我的猜测是我需要输入 root.cert; deviceVertAndCACert.crt; deviceCert.key 进入设备并完全按照假消息 ping MQTT 请求。但这对于多个设备有何不同?一台设备与另一台设备有什么区别?

  1. 我假设硬件设备中的实际代码对于所有设备都是相同的。这个假设是否成立?

  2. 如果我成功预置了大量设备,我该如何处理 AWS IOT 中的传入数据流。我会设想调用一个规则来处理传入的消息。

Mosquitto 假消息:

$ mosquitto_pub --cafile root.cert --cert deviceCertAndCACert.crt --key deviceCert.key -h <prefix>.iot.us-east-1.amazonaws.com -p 8883 -q 1 -t foo/bar -I anyclientID --tls-version tlsv1.2 -m "Hello" -d
  1. 你是对的,你需要你的 CA 证书,它附有来自 JITP 的模板、你的设备证书和你的私钥。 对于设备证书和私钥,这些在每个设备上应该是唯一的,并且应该在设备上放置一次(通过 运行 配置演示或通过直接写入预期的文件名 iot_pkcs11_pal.c 在制造时间)

对于 CA "JITP/JITR Certificate",您有 2 个选项 - 您可以修改 iot_pkcs11_pal.c 以接收此证书并存储它,或者如果 JITR 证书在所有设备之间都相同,您可以只在代码中保留#define keyJITR_DEVICE_CERTIFICATE_AUTHORITY_PEM。

对于多个设备,需要考虑的另一件事是事物名称 - 您可以使用设备证书的字段将您的 "Thing Name" 传送到 AWS IoT,例如设备证书 CommonName 字段。 #define clientcredentialIOT_THING_NAME 可以替换为一个函数(即 getThingName()),该函数解析证书并将事物名称存储在其他库可以引用的某个地方。每个设备的事物名称应该是唯一的 - 有些人使用设备唯一 ID 作为事物名称。

当设备连接到使用 JITP 设置的 CA 时,由于每个设备证书都是唯一的,它可以为每个不同的设备创建不同的东西(并注册设备证书并附加策略)。

  1. 是的,这是有效的,因为您在制造时放置了设备证书和私钥,并如上所述以编程方式检索您的事物名称。

  2. 在您的设备注册 AWS IoT 并能够连接和发送 MQTT 消息后,您可以使用 AWS IoT Rules 设置规则来处理传入的数据(This tutorial 显示将数据从 MQTT 消息添加到 DynamoDB,触发 Lambda 函数执行您编写的代码,或发送 SNS 消息)