本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
移植网络传输接口
集成 TLS 库
传输层安全性协议 (TLS) 身份验证,请使用首选 TLS 堆栈。我们建议使用 Mbed TLS
无论您的设备使用哪种 TLS 实现,都必须为 TCP/IP 堆栈的 TLS 堆栈实现底层传输钩子。它们必须支持 Amazon IoT 支持的 TLS 密码套件。
移植网络传输接口库
您必须实现一个网络传输接口才能使用 coreMQTT
先决条件
要完成此测试,您需要具备以下条件:
一个带有构建系统的项目,该系统可以使用经过验证的 FreeRTOS 内核移植来构建 FreeRTOS。
网络驱动程序的工作实现。
移植
将 FreeRTOS-Libraries-Integration-Tests
作为子模块添加到您的项目中。只要子模块可以构建,将其放在项目中的哪个位置并不重要。 将
config_template/test_execution_config_template.h
和config_template/test_param_config_template.h
复制到构建路径中的项目位置,然后将其重命名为test_execution_config.h
和test_param_config.h
。将相关文件包含到构建系统中。如果使用
CMake
,则使用qualification_test.cmake
和src/transport_interface_tests.cmake
来包含相关文件。在适当的项目位置实现以下功能:
-
network connect function
:签名由src/common/network_connection.h
中的NetworkConnectFunc
定义。此函数接收指向网络上下文的指针、指向主机信息的指针和指向网络凭证的指针。它使用提供的网络凭证与主机信息中指定的服务器建立连接。network disconnect function
:签名由src/common/network_connection.h
中的NetworkDisconnectFunc
定义。此函数接收指向网络上下文的指针。它断开存储在网络上下文中先前建立的连接。setupTransportInterfaceTestParam()
:在src/transport_interface/transport_interface_tests.h
中定义。实现的名称和签名必须与transport_interface_tests.h
定义的完全相同。此函数接收指向 TransportInterfaceTestParam 结构的指针。它将填充传输接口测试使用的 TransportInterfaceTestParam 结构中的字段。
实现 UNITY_OUTPUT_CHAR,这样,测试输出日志就不会与设备日志交错。
从应用程序调用
runQualificationTest()
。在调用之前,必须正确初始化设备硬件并连接网络。
凭证管理(设备端生成的密钥)
将 test_param_config.h
中的 FORCE_GENERATE_NEW_KEY_PAIR 设置为 1 时,设备应用程序会生成新的设备端密钥对并输出公有密钥。在与 Echo 服务器建立 TLS 连接时,设备应用程序使用 ECHO_SERVER_ROOT_CA 和 TRANSPORT_CLIENT_CERTIFICATE 作为 Echo 服务器根 CA 和客户端证书。IDT 在资格认证运行期间设置这些参数。
凭据管理(导入密钥)
在与 Echo 服务器建立 TLS 连接时,设备应用程序使用 test_param_config.h
中的 ECHO_SERVER_ROOT_CA、TRANSPORT_CLIENT_CERTIFICATE 和 TRANSPORT_CLIENT_PRIVATE_KEY 作为 Echo 服务器根 CA、客户端证书和客户端私有密钥。IDT 在资格认证运行期间设置这些参数。
测试
本节介绍如何通过资格认证测试在本地测试传输接口。有关更多详细信息,可在 GitHub 上的 FreerTOS-Libraries-Integration-Tests 的 transport_interface
或者,您也可以使用 IDT 自动执行。有关详细信息,请参阅《FreeRTOS 用户指南》中 适用于 FreeRTOS 的 Amazon IoT Device Tester。
启用测试
打开 test_execution_config.h
并将 TRANSPORT_INTERFACE_TEST_ENABLED 定义为 1。
设置测试的 Echo 服务器
本地测试需要一台可从运行测试的设备访问的 Echo 服务器。如果传输接口实现支持 TLS,则 Echo 服务器必须支持 TLS。如果您还没有,FreeRTOS-Libraries-Integration-Tests
配置测试的项目
在 test_param_config.h
中,将 ECHO_SERVER_ENDPOINT 和 ECHO_SERVER_PORT 更新为上一步中的端点和服务器设置。
设置凭证(设备端生成的密钥)
将 ECHO_SERVER_ROOT_CA 设置为 Echo 服务器的服务器证书。
将 FORCE_GENERATE_NEW_KEY_PAIR 设置为 1 以生成密钥对并获取公有密钥。
生成密钥后,将 FORCE_GENERATE_NEW_KEY_PAIR 设置回 0。
使用公有密钥和服务器密钥以及证书生成客户端证书。
将 TRANSPORT_CLIENT_CERTIFICATE 设置为生成的客户端证书。
安装凭证(导入密钥)
将 ECHO_SERVER_ROOT_CA 设置为 Echo 服务器的服务器证书。
将 TRANSPORT_CLIENT_CERTIFICATE 设置为预先生成的客户端证书。
将 TRANSPORT_CLIENT_PRIVATE_KEY 设置为预先生成的客户端私有密钥。
构建并刷写应用程序
使用您选择的工具链构建和刷写应用程序。调用 runQualificationTest()
时,将运行传输接口测试。测试结果会输出到串行端口。
注意
要使设备正式获得 FreeRTOS 的资格,您必须使用 Amazon IoT Device Tester 为 OTA PAL 和 OTA E2E 测试组验证设备的移植源代码。按照《FreeRTOS 用户指南》中使用适用于 FreeRTOS 的 Amazon IoT Device Tester中的说明为移植验证设置 Amazon IoT Device Tester。要测试特定库的移植,必须在 Amazon IoT Device Tester configs
文件夹下面的 device.json
文件中启用正确的测试组。