【问题标题】:Securing Mosquitto Connections - MQTT保护 Mosquitto 连接 - MQTT
【发布时间】:2017-04-10 06:41:44
【问题描述】:

我在 Windows pc 上设置了一个代理,它将消息发布到树莓派(客户端)。在同一台 windows 机器上,我正在运行一个 node.js 服务器,它也是一个 mosquitto 客户端,可以将消息发布到在同一台 windows 机器上运行的代理。

我查找了(通过简单的谷歌搜索和阅读官方文档)我如何保护moquittoconnections。但我还是遇到了一些问题:

  • 如何只允许 mosquitto 经纪人与客户沟通 在同一台机器上运行? (例如,用于简单地发布传感器 通过 websockets 将值传递给本地前端 - 我已经这样做了)
  • 本地(在同一台机器上)客户端是否需要用户名和 如果指定了密码?
  • 为什么这个配置不需要用户名和密码 客户端何时连接到代理?

我的mosquitto.conf

allow_anonymous false
password_file C:\Program Files (x86)\mosquitto

密码文件在指定位置且有效。

mosquitto -c mosquitto.conf 没有抛出任何错误。

  • 在包含加密的情况下我还能使用用户名和密码吗 mosquitto-tls?

【问题讨论】:

    标签: raspberry-pi mqtt mosquitto


    【解决方案1】:

    侦听器可以绑定到特定接口,例如127.0.0.1 只允许来自本地主机的连接。

    listener 1885 127.0.0.1
    

    如果您想限制整个代理仅侦听本地连接,请使用bind_adddress 配置选项将默认侦听器更改为仅侦听 127.0.0.1 而不是 0.0.0.0(此地址代表所有网络接口机器)

    如果配置了基于密码的身份验证,它适用于所有侦听器,因此如果您设置仅本地主机的侦听器,您仍然需要提供用户名和密码。

    您可以使用 TLS 以及基于用户名和密码的身份验证,除非您使用客户端证书并启用 use_identity_as_usernamerequire_certificate

    【讨论】:

    • 只是为了完成:mosquitto 代理仅在 Windows 上读取mosquitto.conf,如果您将其作为服务运行
    • 错了,如果在命令行中使用-c选项传递,它总是会读取它
    • 来自readme-windows.txt 作为服务运行时,使用安装目录中 mosquitto.conf 中的配置,因此请根据需要进行修改。