我的 OpenSSL 证书无法与 Mosquitto 配合使用

我的 OpenSSL 证书无法与 Mosquitto 配合使用

我正在尝试使用 StackOverflow 答案中的步骤自动创建证书这里
这些是我正在尝试的命令:

  1. openssl genrsa -des3 -out ca.key 2048
  2. openssl req -new -key ca.key -out ca-cert-request.csr -sha256
  3. openssl x509 -req -in ca-cert-request.csr -signkey ca.key -out ca-root-cert.crt -days 365 -sha256
  4. openssl genrsa -out server.key 2048
  5. openssl req -new -key server.key -out server-cert-request.csr -sha256
  6. openssl x509 -req -in server-cert-request.csr -CA ca-root-cert.crt -CAkey ca.key -CAcreateserial -out server.crt -days 360

在步骤 2 中,我将 Common Name 留空。在步骤 5 中,我尝试使用localhost实际主机名作为 Common Name。

当我运行时,mosquitto_pub -h localhost -t mqttsTest42 -p 8883 -m testMessage --cafile "C:\Certificates\ca-root-cert.crt" --cert "C:\Certificates\server.crt" --key "C:\Certificates\server.key"它输出以下内容:

Connection error: Connection Refused: not authorised.
Error: The connection was refused.

如果我手动运行 Mosquitto,它会给出以下信息:

C:\Program Files\mosquitto>mosquitto -c mosquitto.conf -v
1669685112: mosquitto version 2.0.14 starting
1669685112: Config loaded from mosquitto.conf.
1669685112: Opening ipv6 listen socket on port 8883.
1669685112: Opening ipv4 listen socket on port 8883.
1669685112: mosquitto version 2.0.14 running
1669685121: New connection from ::1:49375 on port 8883.
1669685121: Sending CONNACK to auto-7484C261-71E1-F653-3807-74471901380A (0, 5)
1669685121: Client auto-7484C261-71E1-F653-3807-74471901380A disconnected, not authorised.

我曾经与 Mosquitto 和另一家经纪商合作过。为了实现自动化,我更改了太多东西,现在甚至无法让上述最初的六个步骤再为我工作。

我目前正在使用 mosquitto 版本2.0.14和 OpenSSL 版本3.0.7 1 Nov 2022 (Library: OpenSSL 3.0.7 1 Nov 2022)。我尝试过另一个版本的 Mosquitto 和另一个版本的 OpenSSL。

我创建的批处理文件是这里
我的 openssl.cnf 是这里

我的 mosquitto.conf 包含以下行:

listener 8883
certfile C:\Certificates\server.crt
keyfile C:\Certificates\server.key
cafile C:\Certificates\ca-root-cert.crt

下一步我应该尝试什么?

答案1

我怀疑这与 OpenSSL/证书方面无关。如果这是一个问题,错误消息会说一些关于 TLS 错误或握手失败之类的事情——我不记得我遇到这种情况时收到的错误消息是什么。

但是,您收到的错误消息表明 TLS 运行正常,并且 CONNACK 来自应用程序级别的 mosquitto。

我会检查你的mosquitto.conf文件;我怀疑其中有一些权限设置或 ACL 限制了对 mqttsTest42 主题的发布访问,这就是为什么它会踢掉尝试发布到该主题的客户端。

答案2

我遇到了类似的问题,尽管略有不同,但可能会对其他人有所帮助,因为我花了很长时间和大量搜索才找到它。

更改证书/密钥权限为我解决了这个问题。例如

sudo chmod 744 raspberrypi.crt

sudo chmod 644 raspberrypi.key

根据本论坛:- https://github.com/owntracks/tools/issues/6

相关内容