【问题标题】:How to avoid the ca cert in the mosquitto pub and sub for ESP32如何避免 ESP32 的 mosquitto pub 和 sub 中的 ca 证书
【发布时间】:2021-04-17 23:30:47
【问题描述】:

我花了几个小时在我的树莓派中为我的 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-创建一个Server Key,Servers csr,然后server.crt(用ca.crt签名)

3-创建一个Client Key,Client csr然后client.crt(用ca.crt签名)

在 raspberry 客户端中,我使用它来发布:

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

【问题讨论】:

  • 由于您没有共享配置,因此很难评论是否需要更改配置。请在您的问题中包含您的 Mosquitto 配置文件。
  • @romkey 谢谢,我在问题中添加了更多细节
  • 真的不清楚你在这里问什么。您提供的链接中的示例使用 CA 证书来验证代理而不是服务器证书。这应该是正确的工作方式。
  • @hardillb 是的,这就是我感到困惑的原因。在 esp32 示例中(我想植入客户端)可以指定:客户端密钥、客户端 crt 和服务器 pem。我想他们所说的 server.pem 是 CA 证书。但是我怎样才能将 CA crt 转换为 pem 文件呢?
  • 文件扩展名是任意的,你需要去研究一下PEM vs DER证书编码,如何识别它们以及可以使用哪些openssl命令在它们之间进行转换。

标签: ssl mqtt esp32


【解决方案1】:

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

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

【讨论】:

  • 我尝试使用仅使用客户端密钥和客户端 crt 的示例。它可以工作,似乎不需要 CA 证书。我认为这是不安全的。不幸的是,我通常与 Mosquitto 客户端一起使用的 ca.crt 是 crt 格式,我不知道如何在 PEM 文件中进行转换 :-(
  • 我尝试使用 ca.crt,但发现与 CN 名称有关的错误...可能有效,但我必须确保使用正确的 CN 名称
  • CA.crt 工作正常!在示例中,pem 文件具有相同的格式,因此只需用我的 ca.crt 替换文件的内容即可。很重要,当我使用 ca.crt 来使用服务器证书中定义的相同名称时。感谢您的建议
  • 太好了,我很高兴听到你已经整理好了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-20
  • 2015-04-26
  • 2010-09-26
  • 1970-01-01
  • 1970-01-01
  • 2017-06-18
  • 1970-01-01
相关资源
最近更新 更多