You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Toit连接AWS IoT Core并实现MQTT消息发布订阅?

Toit连接AWS IoT Core的MQTT TLS配置疑问解答

场景背景

已完成运行Toit的ESP32与树莓派mosquitto的非TLS MQTT通信,现在尝试对接AWS IoT Core实现MQTT消息收发。已安装Toit根证书包:

jag pkg install github.com/toitware/toit-cert-roots@v1

创建TLS Transport时已将根证书改为certificate_roots.AMAZON_ROOT_CA_1,但不清楚设备证书和私钥的指定方式,针对两个疑问解答如下:

疑问1:是否通过--certificate参数指定设备证书和私钥?如果是,如何创建Certificate对象?

是的,设备证书和私钥就是通过--certificate参数传递的。你需要用Toit的crypto库,从PEM格式的证书和私钥文件内容构造Certificate对象,步骤如下:

  1. 导入所需依赖包:
import crypto
import mqtt
import network
import github.com/toitware/toit-cert-roots as certificate_roots
  1. 读取设备证书和私钥文件(假设证书文件名为device.crt,私钥文件名为device.key,已上传到ESP32的文件系统中):
// 读取PEM格式的设备证书内容
device_cert_pem := File.read "device.crt"
// 读取PEM格式的设备私钥内容(如果私钥有密码,需要额外传入密码参数)
device_key_pem := File.read "device.key"
  1. 构造Certificate对象:
// 无密码的私钥直接传入证书和私钥内容
certificate := crypto.Certificate.from_pem device_cert_pem device_key_pem
// 如果私钥有密码,使用带密码的构造方法:
// certificate := crypto.Certificate.from_pem device_cert_pem device_key_pem --password="your-key-password"
  1. 创建TLS Transport时传入该Certificate对象:
network_interface := network.default_interface
aws_iot_endpoint := "your-aws-iot-core-endpoint"
transport := mqtt.TcpTransport.tls network_interface
    --host=aws_iot_endpoint
    --port=8883
    --root_certificates=[certificate_roots.AMAZON_ROOT_CA_1]
    --server_name=aws_iot_endpoint
    --certificate=certificate

疑问2:是否需要两次指定--certificate参数?

不需要。一个Certificate对象已经同时包含了设备证书和对应的私钥信息,只需要在创建TLS Transport时传入一次--certificate参数即可。


内容的提问来源于stack exchange,提问作者A. Saunders

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 20:50:00