自签署证书中的IP地址应该怎样写

在 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应该怎样写?新手,谢谢你的帮助

必须和你客户端连接时使用的地址一致,所以你如果客户端都是走公网连接,那你就需要配置成公网 IP。

感谢您的帮助,我重新设置了真正的IP,它可以工作了。

但我想延续这个话题一点,为什么和python在同一PC的mqtt.fx客户端连接的时候,尽管证书中IP是127.0.0.1(不是真实的)但它依旧可以连接?

甚至我更换证书时还发现,当emqx broker更换了证书,而mqtt.fx是旧证书(我忘了换),mqttfx依然可以连接?

image

是我在broker的安全设置不正确吗?

你在 EMQX 这边把 verify 配置成 verify_peer 了吗?

感谢您的帮助,应该是我的设置问题。但我还没解决这个问题,我修改了设置如下
我在测试,所以用的是win版本

image

这是旧证书,我确认过emqx.pem是不同的,但它还是可以正常连接
image

应该是 mqtt.fx 的问题,它应该默认没有校验证书,所以你填什么证书都可以连接。你可以试下 MQTT X,它在连接时有一个 SSL 安全选项,关闭就跟 mqtt.fx 一样了,开启才会真的去检查证书路径、证书 IP 这些信息。

我暂时没下载mqttX,所以我用python客户端试了下,也是同样的情况,旧的客户端证书可以连接。
虽然我还没实验,但我相信,使用您说的mqttX并开启ssl就可以避免不匹配的证书连接。

但我很好奇,因为这不合逻辑呀。

根据你的答复这是我的理解

emqx broker就算设置了安全选项,但只要使用mqtt.fx这个“超级工具?"就能绕过了证书匹配,只需要知道broker连接信息和topic就能获得数据。

比如完善的保险柜,专用钥匙严格检查和匹配才能开启保险柜。
换个不合格的钥匙反而不检测就可以打开保险柜了。

我觉得还是broker的设置问题的。如果理解错误请纠正我。

因为你的客户端证书是对的,它通过了 EMQX 的检查。你现在的问题是客户端没去检查服务端的证书是否正确。