下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

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

corePKCS11 相互身份验证演示 (MQTT)

注意:我们建议您在任何物联网 (IoT) 应用程序中始终使用强相互身份验证。此示例使用推荐的相互身份验证,适用于生产 IoT。

简介

本演示建立在 MQTT 相互身份验证演示的基础上,假定您已经熟悉了 MQTT 演示系列,如果您不熟悉,请参阅 MQTT 部分。

PKCS #11 演示项目使用 FreeRTOS Windows 移植 ,因此可以在 Windows 上使用 Visual Studio 的社区免费版进行构建和评估,而无需任何特定的 MCU 硬件。

此演示以类似于 MQTT 相互身份验证的方式建立与 AWS (Amazon Web Services) IoT 的连接,但它使用 PKCS #11 来管理与 AWS IoT 建立连接的必要凭据。出于演示目的,此 PKCS #11 实现使用 Windows 文件系统进行凭据管理。

PKCS #11 通过为每个加密对象分配一个人类可读标签起作用。在本演示中,我们将 "Device Priv TLS Key" 标签映射到我们的私钥, 并将 "Device Cert" 映射到我们的证书。这些标签的名称可以在 core_pkcs11_config.h 中进行管理。 在 core_pkcs11_pal_utils.c 中, 我们已将这些标签分别映射到 corePKCS11_Key.datcorePKCS11_Certificate.dat

源代码组织

基于 PKCS #11 的双向验证演示的 Visual Studio 解决方案文件名为 corePKCS11_MQTT_Mutual_Auth.sln, 位于 \FreeRTOS-Plus\Demo\corePKCS11_MQTT_Mutual_Auth_Windows_Simulator\ 目录(详见 FreeRTOS 主下载内容)。

点击放大

 

配置演示项目

按照 MQTT 相互身份验证中的说明配置演示项目,您可以忽略将您的证书和私钥迁移到 democonfig.h 文件的步骤,但请确保 Thing 名称和 AWS IoT 端点包含在 democonfig.h 中。 可以忽略这些步骤,因为您将通过 PKCS #11 接口导入凭据,而不是通过这个演示。

完成此操作后,请按以下步骤操作:

  1. democonfig.h
    1. democonfigCLIENT_CERTIFICATE_PEM 设置为空字符串。
      #define democonfigCLIENT_CERTIFICATE_PEM ""
    2. democonfigCLIENT_PRIVATE_KEY_PEM 设置为空字符串。
      #define democonfigCLIENT_PRIVATE_KEY_PEM ""
    3. 这是为了防止 \FreeRTOS-Plus\Demo\corePKCS11_MQTT_Mutual_Auth_Windows_Simulator\demo_config.h 生成 编译器错误,并将进一步证明此头文件中的凭据未在演示中的任何地方使用。
  2. 将使用 AWS IoT 核心进行身份验证的密钥和证书 PEM 文件转换为 DER 格式。
    1. 您应该已经在 MQTT 演示中获取了 PEM 格式的凭据。如果没有,请重新查看 MQTT 双向验证系列, 以获取有关检索这些凭据的指导。
    2. 方案 1:使用提供的 python 脚本:
      1. 转到 \FreeRTOS-Plus\Demo\corePKCS11_MQTT_Mutual_Auth_Windows_Simulator,将密钥和证书 PEM 文件的绝对路径传递给 pkcs11_demo_setup.py.
        python3 pkcs11_demo_setup.py -c thing_cert_pem_file.pem -k thing_private_key_pem_file.pem
        这将在运行脚本的相同位置输出等效的 .dat 文件。
    3. 方案 2:手动转换 PEM 文件。
      1. 如果您选择不使用上述脚本,请手动将 PEM 文件转换为 PKCS #11 兼容的 DER 格式。
      2. 使用 OpenSSL 进行转换的示例:
        1. openssl x509 -outform der -in "<CERTIFICATE_PEM_FILE>" -out corePKCS11_Certificate.dat
        2. openssl pkcs8 -topk8 -inform PEM -outfrom -DER -in "<KEY_PEM_FILE>" -out <PKCS11_RELEVANT_FILE_TYPE>
      3. 建议对各个连接使用单独的密钥,以将任何单独的密钥可以解锁的范围保持在最低限度。 本演示旨在按照 core_pkcs11_pal_utils.c 中所述的名称加载密钥。
  3. 将新创建的 .dat 文件移动到与项目解决方案相同的文件夹,本例中为 FreeRTOS-Plus\Demo\corePKCS11_MQTT_Mutual_Auth_Windows_Simulator\corePKCS11_MQTT_Mutual_Auth.sln

 

构建演示项目

本演示项目使用 Visual Studio 社区免费版
  1. 打开 FreeRTOS-Plus\Demo\corePKCS11_MQTT_Mutual_Auth_Windows_Simulator\corePKCS11_MQTT_Mutual_Auth.sln Visual Studio 解决方案文件(通过 Visual Studio IDE 打开)。
    1. 右键点击该项目并选择“设置为启动项目”
      点击放大
  2. 在 IDE 的 "build" 菜单中选择 "build solution"。

 

功能

此演示提供与相互身份验证 MQTT 演示相同的功能,并添加了使用 PKCS #11 管理凭据的内容。有关 MQTT 功能的详细信息,请查看 MQTT 演示系列。

此演示与 MQTT 系列之间的主要区别在于 FreeRTOS-Plus\Source\Application-Protocols\network_transport\transport_mbedtls_pkcs11.c 已修改为使用 PKCS #11。请参阅 FreeRTOS-Plus\Source\Application-Protocols\network_transport\transport_mbedtls_pkcs11.cFreeRTOS-Plus\Source\Application-Protocols\network_transport\transport_mbedtls_pkcs11.h,了解如何使用 PKCS#11 建立 TLS 连接。

应用程序层也存在代码更改,强调使用 PKCS #11 进行凭据管理。例如, 在 FreeRTOS-Plus\Demo\corePKCS11_MQTT_Mutual_Auth_Windows_Simulator\PKCS11_Mqtt_MutualAuthDemo.c 中, NetworkCredentials 结构体不包含客户端证书和密钥, 这与 FreeRTOS-Plus\Demo\coreMQTT_Windows_Simulator\MQTT_Mutual_Auth\DemoTasks\MutualAuthMQTTExample.c 不同。

作为额外的步骤,请尝试将您的 .dat 文件移动到不同的目录中演示。这将导致无法与 AWS IoT 核心建立新连接,因此演示的后续迭代将失败。有关成功演示的输出示例,请参阅 MQTT 演示系列。

Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.