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

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

移植 TLS 库

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

注意

无论设备的 FreeRTOS 移植使用的是哪个 TLS 实施,该移植都必须通过 TLS 的资格认证测试。资格认证基于 Amazon IoT Device Tester 的结果。

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

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

Prerequisites

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

Porting

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

函数 描述
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 可移植层中的说明进行操作。

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

设置本地测试环境

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

  • TLS_ConnectRSA()

  • TLS_ConnectEC()

  • TLS_ConnectMalformedCert()

  • TLS_ConnectBYOCCredentials()

  • TLS_ConnectUntrustedCert()

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

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

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

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

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

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

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

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

运行测试

执行 TLS 测试

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

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

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

重要

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

Validation

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

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