移植 TLS 库 - FreeRTOS
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

移植 TLS 库

对于传输层安全性 (TLS) 身份验证,FreeRTOS 使用 mbedTLS 或片外 TLS 实施,例如某些网络协处理器上的情况。FreeRTOS 包含 mbedTLS 移植。如果您为 TLS 使用 mbedTLS,则无需 TLS 移植。为允许不同 TLS 实施,第三方 TLS 库通过 TLS 抽象层访问。

注意

无论您设备的 FreeRTOS 移植使用什么 TLS 实施,该移植必须通过 TLS 的资格认证测试。资格认证基于 AWS IoT Device Tester 的结果。

此外,您的 TLS 实现应支持 AWS IoT的 TLS 密码套件

要为测试 TLS 准备您的平台,您需要在 AWS 云中配置您的设备,并且您需要在设备上预置证书和密钥。

Prerequisites

要移植 FreeRTOS TLS 库,您需要以下信息:

Porting

如果您的目标硬件将 TLS 功能分载到网络芯片,您需要在以下表中实施 TLS 抽象层功能。

Function Description
TLS_Init 初始化 TLS 上下文。
TLS_Connect 协商 TLS 并连接到服务器。
TLS_Recv 从 TLS 连接读取请求的字节数。
TLS_Send 将请求的字节数写入到 TLS 连接。
TLS_Cleanup 释放 TLS 上下文使用的资源。

iot_tls.h 包含实施这些函数所需的信息。将您在其中实施函数的文件另存为 iot_tls.c

Testing

如果使用 IDE 构建测试项目,您需要在 IDE 项目中设置库移植。

设置 IDE 测试项目

如果使用 IDE 进行移植和测试,您需要先将一些源文件添加到 IDE 测试项目中,然后才能测试移植的代码。

重要

在以下步骤中,请确保您将源文件从磁盘上位置添加到了 IDE 项目。请勿创建源文件的重复副本。

在 IDE 项目中设置 TLS 库

  1. iot_tls.c 添加到 aws_tests IDE 项目。

  2. 添加源文件 iot_test_tls.c 到虚拟文件夹 aws_tests/application_code/common_tests/tls...此文件包括TLS测试。

配置 CMakeLists.txt 文件

如果使用 CMake 构建测试项目,您需要在 CMake 列表文件中为库定义一个可移植层目标。

要在 CMakeLists.txt 中定义库的可移植层目标,请按照FreeRTOS 可移植层中的说明进行操作。

/vendors/vendor/boards/board/CMakeLists.txt 中的 CMakeLists.txt 模板列表文件包括示例可移植层目标定义。您可以取消注释要移植的库的定义,并对其进行修改以适合您的平台。

设置本地测试环境

针对 TLS 移植有五种单独的测试,每种用于 FreeRTOS TLS 库支持的一种类型的身份验证:

  • TLS_ConnectRSA()

  • TLS_ConnectEC()

  • TLS_ConnectMalformedCert()

  • TLS_ConnectBYOCCredentials()

  • TLS_ConnectUntrustedCert()

要运行这些测试,您的主板必须使用 MQTT 协议与 AWS 云通信。AWS IoT 托管对位于边缘的连接设备发送和接收消息的 MQTT 代理。AWS IoT MQTT 代理仅接受经过相互身份验证的 TLS 连接。

按照 将设备连接到 AWS IoT 中的说明将您的设备连接到 AWS IoT。

每个 TLS 测试需要使用不同的证书/密钥组合,并在 /tests/include/aws_clientcredential_keys.h/libraries/freertos_plus/standard/tls/test/iot_test_tls.h 中进行格式设置和定义。

按照 为 TLS 测试设置证书和密钥 中的说明操作以获取您需要的证书和密钥进行测试。

在 IDE 项目中设置库后,您需要配置一些其他文件以进行测试。

为 TLS 测试配置源文件和标头文件

  1. 要启用 TLS 测试,请打开 /vendors/vendor/boards/board/aws_tests/config_files/aws_test_runner_config.h 并将 testrunnerFULL_TLS_ENABLED 宏设置为 1

  2. 打开 /libraries/freertos_plus/standard/utils/src/iot_system_init.c,并在函数 SYSTEM_Init() 中,确保取消注释调用 SOCKETS_Init() 的行。

运行测试

执行 TLS 测试

  1. 构建测试项目,然后将其刷写到您的设备以执行该项目。

  2. 在 UART 控制台中检查测试结果。

    如果通过所有测试,则测试完成。

重要

移植 TLS 库并测试移植之后,您必须运行依赖于 TLS 功能的安全套接字测试。有关更多信息,请参阅安全套接字移植文档中的 Testing

Validation

要正式对设备进行 FreeRTOS 资格认证,您需要使用 AWS IoT Device Tester 验证设备的移植源代码。按照《FreeRTOS 用户指南》中的将 AWS IoT Device Tester 用于 FreeRTOS 中的说明操作,设置 Device Tester 以进行移植验证。要测试特定库的移植,必须在 Device Tester configs 文件夹下面的 device.json 文件中启用正确的测试组。

完成将 FreeRTOS TLS 库移植到设备之后,您可以开始为测试设置 MQTT库。有关说明,请参阅配置 MQTT 库以进行测试