本文共 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
限制连接到当前listener的client的总数. 设置为 -1
表示无限制.注意,其他的系统限制也会影响最大连接数, 但是那超出了mosquitto的控制范围. 可以参考.
reload signal不会导致重新加载.
maximum_qos
count
限制允许的连接到此listener的client的QoS值. 默认为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一起使用, 除此之外,只有 cafile
, certfile
, keyfile
和 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 将会以类似的方式操作使用https的web服务器: 服务器有一个CA签名的认证, client会验证这是一个可信赖的认证. 总的目标是加密网络通信. 通过设置 require_certificate
为 true
, 连接到listener的client 必须提供有效的证书以获得网络连接. 这就可以使用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.3
, tlsv1.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
此选项打开listener的pre-shared-key 支持。Hint会被发送给client,也可以在本地使用来帮助认证。hint是任意格式的字符串,它本什么没有特殊意义,所以可以自由配置。
如果使用了此选项, 需要在 psk_file
文件中定义使用的 pre-shared keys 或者创建一个security plugin来处理。
tls_version
version
配置此listener使用的TLS协议的版本,可用的值为tlsv1.3
, tlsv1.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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!