我正在尝试使用 StackOverflow 答案中的步骤自动创建证书这里。
这些是我正在尝试的命令:
openssl genrsa -des3 -out ca.key 2048
openssl req -new -key ca.key -out ca-cert-request.csr -sha256
openssl x509 -req -in ca-cert-request.csr -signkey ca.key -out ca-root-cert.crt -days 365 -sha256
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server-cert-request.csr -sha256
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