【问题标题】:Setup of CA authority and TLS across devices with Mosquitto使用 Mosquitto 跨设备设置 CA 授权和 TLS
【发布时间】:2020-12-01 00:40:52
【问题描述】:

第一次发帖,如果我的礼节不够到位,请见谅!

我在理解证书颁发机构如何在不同的机器之间工作时遇到了一些麻烦,特别是在 MQTT 和蚊式代理方面。

我已经使用this link 生成了我的服务器和客户端证书,并让它们在本地主机上工作得非常好。对于服务器,我使用通用名称 RPi-Host,即主机名,对于客户端,我使用“localhost”。下面给出了我用来为客户端生成 CA 的代码示例,其中 %NAME 只是证书的名称:

Generate Key with:
$ openssl genrsa -out <%NAME>.key 2048

Generate certificate request with:
$ openssl req -out <%NAME>.csr -key <%NAME>.key -new

Link to main CA:
$ openssl x509 -req -in <%NAME>.csr -CA ../ca/ca.crt -CAkey ../ca/ca.key -CAcreateserial -out <%NAME>.crt -days 365

假设我生成了 client 和 client2 证书,然后我可以在 RPi-Host 上的 2 个不同终端中运行以下命令,并且连接完全没有问题:

Subscribe to MQTT broker:
$ mosquitto_sub -p 8883 --cafile ca.crt --cert client2.crt --key client2.key -h localhost -t /world

Publish to MQTT broker:
$ mosquitto_pub -p 8883 --cafile ../ca/ca.crt --cert client.crt --key client.key -h localhost -m hello! -t /world

但是,如果我将 -h localhost 更改为 192.168.0.190,即 IP 地址,我立即得到:

Error: A TLS Error occurred.

...这不是很有帮助!

我们的目的是尝试从一台单独的机器上连接到它,但是我只是想在同一台机器上使用自己的 IP 地址来连接它!生成证书时,我是否需要在通用名称中添加一些花哨的东西?遗憾的是,我还没有找到一个教程来回顾在两台不同的机器上使用 mosquitto 和 TLS 进行连接。

任何指针表示赞赏,如果我错过了明显的,非常抱歉!

亚历克斯

【问题讨论】:

    标签: mqtt tls1.2 mosquitto ca


    【解决方案1】:

    您用于连接到远程机器的主机名(或 IP 地址*)必须与该机器提供的证书中的 CN/SAN 值匹配。

    localhost 真的不应该在证书中使用,因为它只是一个显示“这台机器”的占位符。将 TLS/SSL 与 localhost 一起使用没有任何用处。您应该始终使用代理的外部使用主机名生成证书。

    如果您无法在 DNS 服务器中设置正确的主机名,那么您可能应该将合适的条目添加到具有代理主机名的所有客户端计算机上的 /etc/hosts 文件中。

    该错误的临时解决方法可能是将-i 添加到 mosquitto_pub 和 mosquitto_sub 命令行。这告诉他们忽略主机名和证书中的名称之间的任何未匹配项。但这只是一种解决方法,因为它基本上否定了 TLS/SSL 的两个关键功能之一(1. 证明您要连接的机器是它声称的机器,2. 启用在客户端之间来回传递的消息的加密/经纪人)

    * 可以为 TLS 使用原始 IP 地址,但它增加了获取证书中的条目正确的难度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-23
      • 2016-06-12
      • 2020-03-27
      • 2019-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多