如何避免 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 进行转换。
我花了几个小时在我的树莓派中为我的 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 进行转换。