尝试从 mosquitto 1.1.3 升级到 1.2.1/1.2.1。我在尝试订阅事件时遇到此错误。
mosquitto_sub -h 192.168.255.2 -p 8883 -v -t "test" --cafile /etc/certs/rootCA/ca.root.crt –d
OpenSSL Error: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
同一个 CA 证书在 1.1.3 版本中工作正常。
是不是openssl版本有问题? 我的版本是 1.0.0。
最佳答案
问题是您证书中的 commonName
与您要连接的主机名(在本例中为 IP 地址)不匹配。 1.1.3 没有对此进行验证,因此很容易受到冒充您的服务器的攻击。</p>
您应该修复您的 commonName
以匹配您正在使用的主机名,或者最好使用 subjectAltName
证书扩展来提供您的主机名/IP 地址。 subjectAltName
允许您在证书中指定任意数量的主机名和 IP 地址。 Mqttitude有一个如何生成证书的例子:https://github.com/binarybucks/mqttitude/blob/master/tools/TLS/generate-CA.sh
我认为使用 IP 地址作为 commonName 是不受欢迎的。
作为最后一个选项,您还可以为 mosquitto_pub/sub 使用 --insecure
选项,或者如果您使用的是网桥,则设置 tls_insecure
。正如这些选项所暗示的那样,这样做会降低系统的安全性。
关于mosquitto 1.2.1/1.2.2 中的 CA 证书的 SSL 证书失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19787320/