ZHCACY3 august   2023 AM2431 , AM2432 , AM2434 , AM2631 , AM2631-Q1 , AM2632 , AM2632-Q1 , AM2634 , AM2634-Q1 , AM263P4 , AM263P4-Q1 , AM2732 , AM2732-Q1 , AM6411 , AM6412 , AM6421 , AM6422 , AM6441 , AM6442

 

  1.   1
  2.   摘要
  3.   商标
  4. 1引言
    1. 1.1 本文档中使用的首字母缩写词
  5. 2MbedTLS
    1. 2.1 MbedTLS 是什么?
    2. 2.2 为何选择 MbedTLS?
    3. 2.3 MbedTLS 的应用
  6. 3在 Lwip 上使用 MbedTLS
    1. 3.1 TLS 服务器示例(HTTPS 服务器)
    2. 3.2 TLS 客户端示例(MQTT 客户端)

TLS 客户端示例(MQTT 客户端)

该示例演示了 AM2x 器件用作 MQTT 客户端的情形,其中客户端订阅 MQTT 代理并在另一个客户端发布数据时截取数据。本例中使用的 MQTT 代理是开源软件 Mosquito MQTT。分配给 Mosquito 代理和 MQTT 客户端的 IP 地址是静态地址。

此示例中执行双向身份验证,其中涉及到客户端验证服务器和服务器验证客户端。由于使用本地生成的证书和自签名证书,因此 CA 证书和 CA 密钥用作服务器证书和密钥。

下面介绍了 MQTT + TLS 客户端的顶层工作方式:

MbedTLS 的作用:

  • 创建使用 CA 证书、CA 密钥、客户端证书、私钥、私钥访问密码(可选)的 TLS 配置。标准分配器函数为 TLS over TCP 创建 altcp PCB。
  • 加载客户端证书和私钥。然后基于 x509 证书(DER 或 PEM)的格式解析证书和密钥。
  • 传递私钥并与证书中的公钥进行比较。如果两者匹配,则证书和密钥/密钥对验证成功。
  • 将 TLS 配置传递给 LwIP 应用 API,这些 API 在 PCB(相应 TCP 连接的进程控制块)内部使用相同的 TLS 配置。
  • 使用 mbedTLS 加密函数验证证书和密钥。如果发生任何解析错误或数据不一致,则表示证书和密钥无效,正在进行的网络连接将被断开。

LwIP 的作用:

  • 在 LwIP 的 mqtt_context 结构内填充 TLS 配置。
  • 为定义的 MQTT 端口和 IP 地址创建 altcp PCB,并设置连接回调。传递包含 TLS 配置的客户端信息。
  • 设置 altcp_accept 回调,用于处理新的传入连接、分配内存来管理连接状态,以及设置用于发送、接收、错误处理和轮询的回调。
  • mqtt 连接回调负责订阅/取消订阅一个主题,并将有关该主题的所需数据发送给 MQTT 代理。
  • 设置输入回调函数,用于确定客户端在接收到数据时的行为。
  • 根据连接状态处理数据。

图 3-3 展示了使用 SA2UL 加密加速器进行加密(可选)时的相同用例。

GUID-071E4D61-E3DB-4468-8891-5C5122D32A40-low.png图 3-3 MQTT + TLS 客户端工作概述