grhsc
2023 年1 月 16 日 11:36
1
在 EMQX MQTT 服务器启用 SSL/TLS 安全连接 这篇文章中,提到的IP地址应该怎样写?
我的理解这是绑定broker的IP地址,但它是局域网,还是公网IP呢?
我第一次尝试用的localhost,
[alt_names]
IP.1 = 127.0.0.1
DNS.1 = 8.8.8.8
它似乎也能用,包括在局域网用其他电脑的mqttfx加载证书后也能订阅和发布。但我用这台有mqttfx的相同电脑用python paho.mqtt去发布数据,就出现以下错误
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: IP address mismatch, certificate is not valid for ‘192.168.1.54’. (_ssl.c:1123)
所以证书中IP应该怎样写?新手,谢谢你的帮助
t1ger
2023 年1 月 17 日 01:27
2
必须和你客户端连接时使用的地址一致,所以你如果客户端都是走公网连接,那你就需要配置成公网 IP。
grhsc
2023 年1 月 17 日 01:37
3
感谢您的帮助,我重新设置了真正的IP,它可以工作了。
但我想延续这个话题一点,为什么和python在同一PC的mqtt.fx客户端连接的时候,尽管证书中IP是127.0.0.1(不是真实的)但它依旧可以连接?
甚至我更换证书时还发现,当emqx broker更换了证书,而mqtt.fx是旧证书(我忘了换),mqttfx依然可以连接?
是我在broker的安全设置不正确吗?
t1ger
2023 年1 月 17 日 01:54
4
你在 EMQX 这边把 verify 配置成 verify_peer
了吗?
grhsc
2023 年1 月 17 日 02:30
5
感谢您的帮助,应该是我的设置问题。但我还没解决这个问题,我修改了设置如下
我在测试,所以用的是win版本
这是旧证书,我确认过emqx.pem是不同的,但它还是可以正常连接
t1ger
2023 年1 月 17 日 02:35
6
应该是 mqtt.fx 的问题,它应该默认没有校验证书,所以你填什么证书都可以连接。你可以试下 MQTT X,它在连接时有一个 SSL 安全选项,关闭就跟 mqtt.fx 一样了,开启才会真的去检查证书路径、证书 IP 这些信息。
grhsc
2023 年1 月 17 日 02:44
7
我暂时没下载mqttX,所以我用python客户端试了下,也是同样的情况,旧的客户端证书可以连接。
虽然我还没实验,但我相信,使用您说的mqttX并开启ssl就可以避免不匹配的证书连接。
但我很好奇,因为这不合逻辑呀。
根据你的答复这是我的理解
emqx broker就算设置了安全选项,但只要使用mqtt.fx这个“超级工具?"就能绕过了证书匹配,只需要知道broker连接信息和topic就能获得数据。
比如完善的保险柜,专用钥匙严格检查和匹配才能开启保险柜。
换个不合格的钥匙反而不检测就可以打开保险柜了。
我觉得还是broker的设置问题的。如果理解错误请纠正我。
t1ger
2023 年1 月 17 日 02:56
8
因为你的客户端证书是对的,它通过了 EMQX 的检查。你现在的问题是客户端没去检查服务端的证书是否正确。