如何避免 ESP32 的 mosquitto pub 和 sub 中的 ca 证书

How to avoid the ca cert in the mosquitto pub and sub for ESP32

我花了几个小时在我的树莓派中为我的 mosquitto 代理设置 TSL 连接。现在我可以使用客户端证书、客户端私钥和 ca 证书在客户端(在树莓派上)发布和订阅主题。它工作正常。

现在我想在ESP32(IDF平台)中创建客户端。我从名为 ssl_mutual_auth 的示例开始。不幸的是,示例中使用的是客户端证书、客户端私钥和服务器证书,而不是 ca 证书。所以..我很困惑,我不知道如何在 esp32 客户端(或 Mosquitto 客户端)中管理 ca.crt 文件。我需要更改证书或 mosquittos 配置吗?我使用本指南配置我的 mosquitto 代理:https://medium.com/himinds/mqtt-broker-with-secure-tls-communication-on-ubuntu-18-04-lts-and-an-esp32-mqtt-client-5c25fd7afe67

这里是 Mosquitto.conf 我设置证书路径的详细信息:

persistence true
persistence_location /var/lib/mosquitto/

log_dest file /var/log/mosquitto/mosquitto.log

allow_anonymous false
password_file /etc/mosquitto/passwords
include_dir /etc/mosquitto/conf.d

cafile /etc/mosquitto/certs/ca.crt
certfile /etc/mosquitto/certs/server.crt
keyfile /etc/mosquitto/certs/server.key
require_certificate true
use_identity_as_username true

这是我所做的:

1-创建 CA 机构(用于自签名证书)

2-创建服务器密钥、服务器 csr,然后 server.crt(用 ca.crt 签名)

3-创建一个客户端密钥,客户端csr然后client.crt(用ca.crt签名)

在树莓派客户端,我用这个来发布:

mosquitto_pub -t "test" -m "hello" -d --cert client.crt --key client.key --cafile ca.crt --insecure

我用这个订阅:

mosquitto_sub --cafile ca.crt -t "#" -d --cert client.crt --key client.key

ESP IDF 文档在 PKI 术语方面存在一些问题。我很确定当他们说“服务器证书”时,他们的意思是“链中任何验证服务器身份的证书:CA、中间证书或服务器证书”。他们在 HTTPS 客户端文档中犯了同样的错误。

无论如何,只需将您的 CA 证书提供给 ESP 示例项目并尝试一下。确保它是 PEM 格式 - 查看 this answer 了解详情。如果需要,使用 openssl 进行转换。