下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

最新资讯
简化任何设备的身份验证云连接。
利用 CoAP 设计节能型云连接 IoT 解决方案。
11.0.0 版 FreeRTOS 内核简介:
FreeRTOS 路线图和代码贡献流程。
使用 FreeRTOS 实现 OPC-UA over TSN。

AWS IoT Fleet Provisioning 演示

简介

AWS IoT Fleet Provisioning 演示展示了为一批 IoT 设备预置唯一证书, 并使用 Fleet Provisioning(队列预置)功能将其注册到 AWS IoT 核心的方法。该演示 展示了能在板上生成公私密钥对的设备是如何利用 通用声明证书(遍及整批设备),为其生成的密钥对 向 AWS IoT 核心请求唯一证书,并在 AWS IoT 核心中将自身注册为 AWS IoT 事物资源的过程。

有关 AWS IoT Fleet Provisioning 功能的更多信息,请参阅 使用 Fleet Provisioning 预置无证书设备 章节(在《AWS IoT 开发者指南》中)。Fleet Provisioning 有两种预置工作流程: 声明预置受信任用户预置。此演示展示了如何使用 声明预置工作流程, 通过向 AWS IoT 核心注册通用声明证书为设备预置唯一证书的过程。此演示项目使用 Visual Studio 免费社区版

在启动 Fleet Provisioning 演示之前,我们建议您使用 corePKCS11 相互身份验证演示 (MQTT) 来连接到 AWS IoT。这将确保 AWS IoT 连接正常运行以及 corePKCS11 凭证管理功能正常执行。

源代码组织

此演示项目被称为 fleet_provisioning_demo.sln, 可在 GitHub 上的 FreeRTOS 存储库中找到, 其目录如下所示:

FreeRTOS-Plus/Demo/AWS/Fleet_Provisioning_Windows_Simulator/Fleet_Provisioning_With_CSR_Demo

在运行演示前设置 AWS 资源

要使用 AWS IoT 核心的 Fleet Provisioning 功能,您必须设置 IAM 角色预置模板(在您的 AWS 帐户中设置)。这些 AWS 资源可通过 AWS 控制台设置,也可通过 AWS CLI 以编程方式进行设置。下列说明将指导您 使用 AWS CLI 来设置这些资源。(在下列示例命令中,将 <aws-region><aws-account-id> 替换为 AWS Region(区域)and ID, 后两者须与您的 AWS 帐户相关。)有关设置 AWS CLI 的信息,请参阅 AWS CLI 入门指南

  1. 导航至 FreeRTOS-Plus/Demo/AWS/Fleet_Provisioning_Windows_Simulator/Fleet_Provisioning_With_CSR_Demo 中的演示子文件夹。

  2. 创建队列预置模板所需的 IAM 角色。

    aws iam create-role \
        --role-name "FleetProvisioningDemoRole" \
        --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"iot.amazonaws.com"}}]}'
  3. 将 “AWSIoTThingsRegistration” 策略附加至上一步骤创建的角色上。这 使得该角色可以注册新的 AWS IoT 事物。

    aws iam attach-role-policy \
        --role-name "FleetProvisioningDemoRole" \
        --policy-arn arn:aws:iam::aws:policy/service-role/AWSIoTThingsRegistration
  4. 创建 AWS IoT 策略, Fleet Provisioning 声明将把其附加至新创建的事物上。 您可以修改 IoT 事物策略示例,使其可同演示一起使用, 该示例可在 "example_iot_thing_policy.json" 文件中找到。在 运行下列命令前,您需修改 “example_iot_thing_policy.json” 文件, 将所有出现在尖括号中的下列项目都替换掉:
    • 将 <aws-region> 替换成您所选择的 AWS 区域(例如 us-west-2)
    • 将 <aws-account-id> 替换成您的 AWS 帐户 ID
    aws iot create-policy \
        --policy-name FleetProvisioningDemoThingPolicy \
        --policy-document file://example_iot_thing_policy.json

  5. 创建 IoT 事物类型。此事物类型将被附加至 Fleet Provisioning 演示创建的所有事物上, 以方便清理。
    aws iot create-thing-type --thing-type-name "fp_demo_things"
    

  6. 创建将用于预置演示应用程序的模板资源。此步骤仅需操作一次即可 。有关队列预置模板的更多信息,请参阅 本指南。您 可在 "example_fleet_provisioning_template.json" 文件中找到可与演示一同使用的队列预置模板示例。
    aws iot create-provisioning-template \
        --template-name FleetProvisioningDemoTemplate \
        --provisioning-role-arn arn:aws:iam::<aws-account>:role/FleetProvisioningDemoRole \
        --template-body file://example_fleet_provisioning_template.json \
        --enabled

  7. 完成队列预置模板后, 您可使用下列 CLI 命令验证其是否创建成功。
    aws iot describe-provisioning-template --template-name FleetProvisioningDemoTemplate

  8. 在 AWS IoT 控制台中创建用作根证书的 ECDSA 密钥对和证书。 注意corePKCS11 的 MbedTLS 端口目前只支持使用 prime256v1 曲线的 ECDSA 密钥。 有关更多信息,请参阅 corePKCS11的 core_pkcs11_mbedtls.c
    openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 \
        -x509 -nodes -days 30 -out Root_ECDSA_Cert.pem -keyout Root_ECDSA_Key.pem

  9. 通过 AWS IoT 控制台或使用 AWS CLI 注册新的 CA 证书
    aws iot register-ca-certificate \
        --ca-certificate file://Root_ECDSA_Cert.pem \
        --certificate-mode SNI_ONLY

  10. 生成由先前生成的证书签名的 ECDSA 证书,用作演示的声明证书
    openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 \
        -CA Root_ECDSA_Cert.pem -CAkey Root_ECDSA_Key.pem \
        -x509 -nodes -days 14 -out ECDSA_Claim_Cert.pem -keyout ECDSA_Claim_Key.pem

  11. 通过 AWS IoT 控制台或 AWS CLI 向 AWS IoT Core 注册声明证书: 注意: 在后面的步骤中,您将需要该函数返回的 ARN!
    aws iot register-certificate \
        --set-as-active \
        --certificate-pem file://ECDSA_Claim_Cert.pem \
        --ca-certificate-pem file://Root_ECDSA_Cert.pem

  12. 为声明证书创建 IoT 策略。下列 AWS CLI 命令就是 创建 IoT 策略时需用到的命令。声明证书策略示例可在 "example_claim_policy.json" 文件中找到。在 运行 “create-policy” 命令前,请修改 “example_claim_policy.json”文件, 将所有出现在尖括号中的下列项目都替换掉:
    • 将 <aws-region> 替换成您所选择的 AWS 区域(例如 us-west-2)
    • 将 <aws-account-id> 替换成您的 AWS 帐户 ID
    aws iot create-policy \
        --policy-name FleetProvisioningDemoClaimPolicy \
        --policy-document file://example_claim_policy.json

  13. 将策略附加至声明证书上。将 <Claim-Cert-ID> 替换成 您在步骤 11 中创建的声明证书的 ID。
    aws iot attach-policy \
        --target "arn:aws:iot:<aws-region>:<aws-account-id>:cert/<Claim-Cert-ID>" \
        --policy-name "FleetProvisioningDemoClaimPolicy"

配置演示项目

  1. 演示使用 FreeRTOS-Plus-TCP TCP/IP 堆栈, 因此请按照所提供的 TCP/IP 入门项目说明进行操作:

    1. 安装必备组件(例如 WinPCap)。
    2. 设置静态或动态 IP 地址、网关地址和网络掩码(可选)。
    3. 设置了 MAC 地址(可选)。
    4. 在您的主机上选择以太网接口
    上述设置应在 Fleet Provisioning 演示项目的 FreeRTOSConfig.h 文件中修改 。
  2. 配置 demo_config.h。用户必须定义下列宏,才能让演示运行:

    • democonfigMQTT_BROKER_ENDPOINT
    • democonfigROOT_CA_PEM
    • democonfigPROVISIONING_TEMPLATE_NAME
     
  3. 将您在步骤 8 中创建的声明证书和私钥文件转换为 DER 格式。 这一步可手动完成,也可使用所包含的 Python 脚本 "convert_credentials_to_der.py" 来完成。

    • 方案 1 - 使用所包含的 Python 脚本:
      1. 此脚本需使用 Python 3。如果您未安装“加密” Python 模块, 则可运行命令
        pip3 install cryptography
  4. 导航至文件夹 ...\FreeRTOS-Plus\Demo\AWS\Fleet_Provisioning_Windows_Simulator\Fleet_Provisioning_With_CSR_Demo\DemoSetup 并将 .pem 文件移动到此文件夹中。

  5. 运行脚本:

    python3 convert_credentials_to_der.py -c ClaimCertificate.pem -k ClaimPrivateKey.pem
    这将在运行脚本的相同位置输出等效的 .dat 文件。
  6. *.dat 文件移至 ...\FreeRTOS-Plus\Demo\AWS\Fleet_Provisioning_Windows_Simulator\Fleet_Provisioning_With_CSR_Demo

  • 方案 2 - 手动转换 PEM 文件:
    1. 采用您所喜欢的方法将 PEM 文件转换为 PKCS #11兼容的 DER 格式。 以下是使用 OpenSSL 转换此文件格式的示例:
      1. openssl x509 -outform der -in "ClaimCertificate.pem" -out corePKCS11_Claim_Certificate.dat
      2. openssl rsa -in ClaimPrivateKey.pem -out corePKCS11_Claim_Key.dat -outform DER
    2. *.dat 文件移入 ...\FreeRTOS-Plus\DemoAWS\Fleet_Provisioning_Windows_Simulator\Fleet_Provisioning_With_CSR_Demo
  • 构建演示项目

    此演示项目使用 Visual Studio 的社区免费版。要构建演示,请执行如下操作:

    1. 从 Visual Studio IDE 中打开 Visual Studio 解决方案文件 FreeRTOS-Plus/Demo/AWS/Fleet_Provisioning_Windows_Simulator/Fleet_Provisioning_With_CSR_Demo/fleet_provisioning_demo.sln
    2. 在 IDE 的 “Build” 菜单中选择 “Build Solution”。

    功能

    演示展示了 Fleet Provisioning 功能的声明预置工作流程, 该功能为使用 corePKCS11 进行凭据管理的 AWS IoT 核心所有。

    1. 演示使用步骤 13 中准备的声明凭证连接到 AWS IoT MQTT 代理。
    2. 演示使用 corePKCS11 创建和存储新的密钥对和证书文件。这些凭据 之后将用于预置新的 AWS IoT 事物。
    3. 调用 CreateCertificateWithCsr MQTT API 提出证书签名请求 (CSR),以便 AWS IoT 确认并签署证书。
    4. 调用 RegisterThing MQTT API 创建新的,且使用密钥对和新签名证书的 AWS IoT 事物。
    5. 预置新事物后,演示将断开与 AWS IoT MQTT 代理的连接。
    6. 演示使用新创建的事物凭据连接到 AWS IoT MQTT 代理,以验证 该事物是否已成功注册。

    prvFleetProvisioningTask() 函数的源代码可在 GitHub 上的 FleetProvisioningDemoExample.c 文件中找到。

    下列屏幕截图显示了演示正确执行时的预期输出:

    演示成功 点击放大
    Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.