mosquitto 配置详解(2):listener的通用配置项和SSL/TLS的支持
发布日期:2021-10-03 22:59:12 浏览次数:11 分类:技术文章

本文共 5757 字,大约阅读时间需要 19 分钟。

本部分是Listener的配置,包括通用配置项,基于认证的SSL/TLS支持,基于PSK的SSL/TLS支持

Listeners

Mosquitto监听的网络端口号可以使用listener控制。默认的 listener 选项可以重写,更多的listeners可以创建.

通用配置项

bind_address address

只监听指定的IP地址和hostname. 需要限制访问指定的网络接口时这个选项很有用. 要限定只能通过local host 访问mosquitto ,可配置为"bind_address localhost". 只应用给默认的listener. 可以使用 listener 来控制其他的listeners.

建议使用显示的 listener 配置,而不是使用隐式的默认 listener选项

reload signal不会导致重新加载.

bind_interface device

指定监听特定的接口.  bind_address 选项类似, 但是当一个接口有多个地址或者地址可变时,这个选项很有用.

这个选项可以与 bind_address 一起用在默认listener, 或者用在 bind address/host部分定义的 listener . 需要注意的是, 要确保绑定的IP地址在要绑定的接口上.如果设置 bind_interface  eth0,  bind_address 127.0.0.1, 这时broker能正常启动但是无法建立连接.

这个选项只在Linux下有效并且需要相应权限.

reload signal不会导致重新加载.

http_dir directory

当一个 listener使用 websockets 协议时, 它也需要提供 http data 服务. 设置 http_dir 为包含需要服务的文件的目录.如果不设置此选项, 不会建立正常的http连接.

reload signal不会导致重新加载.

listener port [bind address/host]

监听的端口号. 可选的第二选项可以指定绑定的ip地址或者hostname.  如果使用了这个变量并且全局的bind_address 或者port也配置了, 那么默认的listener 将不会启动.

bind address/host 选项允许这个listener通过传入IP地址或者hostname绑定到特定的IP地址. websockets listeners, 只能传IP 地址.

这个选项可以配置多次. 参见mount_point 选项.

reload signal不会导致重新加载.

max_connections count

限制连接到当前listenerclient的总数. 设置为 -1 表示无限制.注意,其他的系统限制也会影响最大连接数, 但是那超出了mosquitto的控制范围. 可以参考.

reload signal不会导致重新加载.

maximum_qos count

限制允许的连接到此listenerclientQoS. 默认为2, 意思是任何QoS都可以使用. 设置为 0 1 来限定QoS. 使用了 MQTT v5 的一个功能来通知client这个限制. MQTT v3.1.1 clients 不会收到此限制. Clients 以太高的QoS发布消息到listener会被中断连接.

reload signal不会导致重新加载.

max_topic_alias number

MQTT v5 client 可以创建topic aliases的最大数量. 这个选项per listener配置. 默认为10. 设置为0会禁止topic aliases. 允许的最大值为 65535.

reload signal不会导致重新加载.

mount_point topic prefix

这个选项用来隔离client到特定组. 当一个client使用此选项连接到listener, 此字符串会加到这个client的所有topic的开头. 当消息发送给client, 这个前缀会被删除掉. 也就是说, mount point’example’listener, client 只能看到发布的topic 结构为example 和以下的topic.

Reload signal不会导致重新加载.

port port number

设置默认listener 监听的端口号. 默认为1883.

Reload signal不会导致重新加载.

建议使用显式的 listener 而不是依赖于隐式的默认listener.

protocol value

设置当前listener接受的协议. 默认是 mqtt, 如果可用,也可以是websockets.

Websockets 在编译时是默认关闭的. 基于TLS的认证可与websockets一起使用, 除此之外,只有 cafilecertfilekeyfile  ciphers 选项可以支持.

Reload signal不会导致重新加载.

socket_domain [ ipv4 | ipv6 ]

listener 默认会尝试监听所有支持的IP协议版本. 如果没有IPv4或者IPv6接口, 你可以禁止此版本的IP. 特别的, 因为websockets 库的限制, 如果IPv6在编译时打开了, socket连接时它只会打开IPv6 sockets, 如果IPv6不可用, 连接会失败.

设置为 ipv4 会强制listener只使用IPv4,或者设置为 ipv6会强制listener只使用IPv6. 如果你想同时支持 IPv4 IPv6, 请不要使用socket_domain 选项.

Reload signal不会导致重新加载.

use_username_as_clientid [ true | false ]

设置 use_username_as_clientid  true, client连接时会使用它的username 替换clientid.  这样,可以允许鉴权只使用clientid,也就是可以阻止一个client使用相同的clientid断开另一个连接. 默认为false.

此选项为true, 如果一个client连接时不带username,连接会被断掉. 不要同时使用 clientid_prefixes选项.

参见 use_identity_as_username.

Reload signal不会导致重新加载.

websockets_log_level level

修改websockets log级别. 这是一个全局选项, 不能per listener设置. 这是一个整型值, libwebsockets 会解析为它的lws_log_levels 枚举值. 参见 libwebsockets 文档了解更多细节.

使用这个选项log_type websockets 必须打开. 默认为0.

websockets_headers_size size

修改websockets headers 大小. 这是一个全局选项, 不能per listener设置. 这个选项用来设置libwebsockets 库读HTTP header时使用的buffer的大小. 如果需要传递很大的header数据,例如cookies, 就需要增大这个值. 如果不设置或者设置为 0, 会使用默认1024个字节.

基于认证的SSL/TLS 支持

下面的配置项用于所有的listener配置基于认证的SSL 支持. 参见 "基于Pre-shared-key SSL/TLS 支持".

cafile file path

必须至少提供一个 cafile 或者 capath 来打开 SSL 支持.

Cafile用来定义包含PEM编码的可信赖的CA认证的文件路径 .

capath directory path

必须至少提供一个 cafile 或者 capath 来打开 SSL 支持.

capath 用来定义存放PEM编码的可信赖的CA认证文件的目录路径. 为了让 capath 正常工作, 认证文件必须以 ".pem" 结尾, 而且每次添加或删除一个认证时必须运行"openssl rehash <path to capath>".

certfile file path

PEM 编码的服务器认证的路径.

ciphers cipher:list

允许的密码列表, 每个以冒号分隔. 可用的密码可以通过运行"openssl ciphers"命令获得.

crlfile file path

如果将 require_certificate 设为 true, 你可以创建一个认证撤销列表文件用于撤销对特定client认证的访问. 使用crlfile指向PEM编码的撤销文件.

dhparamfile file path

dhparamfile 文件路径. dhparamfile 文件可以通过命令产生,例如:

openssl dhparam -out dhparam.pem 2048

keyfile file path

PEM编码的keyfile文件路径.

require_certificate [ true | false ]

默认,一个启用 SSL/TLS listener 将会以类似的方式操作使用httpsweb服务器: 服务器有一个CA签名的认证, client会验证这是一个可信赖的认证. 总的目标是加密网络通信. 通过设置 require_certificate  true, 连接到listenerclient 必须提供有效的证书以获得网络连接. 这就可以使用MQTT之外的机制来控制对broker的访问.

tls_engine engine

一个有效的 openssl engine id. 可以通过openssl engine 命令获取列表.

tls_engine_kpass_sha1 engine_kpass_sha1

使用TLS engine时的私有密钥的SHA1.一些 TLS engines,例如TPM engine 可能需要密码来访问. 这个选项允许以十六进制SHA1 hash 编码密码直接给engine而不是用户手动提供密码.

tls_keyform [ pem | engine ]

指定当建立TLS连接时的私有密钥的类型. 可以是 "pem" "engine". 当使用TPM模块并且私有密钥已经创建时,这个参数有用. 默认为"pem", 意思是使用正常的私有密钥文件.

tls_version version

配置listener使用的TLS协议的版本可选值为 tlsv1.3tlsv1.2 and tlsv1.1. 如果不设置此项, 默认所有的TLS v1.3, v1.2 and v1.1 版本都在用.

use_identity_as_username [ true | false ]

如果 require_certificate  true,你可以设置 use_identity_as_username  true 以使用client证书的CN 值作为用户名.如果此项为 true, password_file 选型将不会被使用.

优先级高于 use_subject_as_username ,如果它们两个都被设为 true.

参见 use_subject_as_username

use_subject_as_username [ true | false ]

如果 require_certificate  true, 你可以设置use_subject_as_username  true 以使用client证书的完整subject作为用户名. 如果此项为 true,  password_file 选项就不会使用.

产生的subject 的格式类似于 CN=test client,OU=Production,O=Server,L=Nottingham,ST=Nottinghamshire,C=GB.

参见 use_identity_as_username

基于Pre-shared-key SSL/TLS 支持

下面的配置项用于所有的listener配置基于pre-shared-key SSL支持. 参见"基于认证的SSL/TLS 支持".

ciphers cipher:list

当使用PSK, 使用的加密秘钥会从可用的PSK秘钥列表中选择。如果要指定可用秘钥的列表,可以使用此选项。运行"openssl ciphers"命令 可以获得可用秘钥,需要保持命令输出的格式。

psk_hint hint

此选项打开listenerpre-shared-key 支持。Hint会被发送给client,也可以在本地使用来帮助认证。hint是任意格式的字符串,它本什么没有特殊意义,所以可以自由配置。

如果使用了此选项, 需要在 psk_file 文件中定义使用的 pre-shared keys 或者创建一个security plugin来处理。

tls_version version

配置此listener使用的TLS协议的版本,可用的值为tlsv1.3tlsv1.2 and tlsv1.1. 如果不设置,默认所有的 TLS v1.3, v1.2 v1.1都可用.

use_identity_as_username [ true | false ]

使用client发送的 psk identity 作为它的 username. username 将按照正常方式检查, 所以需要使用 password_file 或者其他认证检查方式. 不使用password

转载地址:https://blog.csdn.net/lclfans1983/article/details/105670288 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:mosquitto 配置详解(3): bridge的配置
下一篇:mosquitto 配置详解(1):认证鉴权和通用配置项

发表评论

最新留言

很好
[***.229.124.182]2023年03月21日 18时09分02秒