gpt4 book ai didi

ssl - Mosquitto TLS 设置自动有效负载大小限制

转载 作者:行者123 更新时间:2023-12-04 22:38:03 25 4
gpt4 key购买 nike

我已经实现了一个不安全的 mosquitto 代理,它可以通过端口 1883 定期发送大量数据(每分钟约 200kb 文件)。

由于我已经实现了 TLS,尽管设置了 message_size_limit = 0,但代理似乎自动拒绝端口 8883 上 >128kb 的数据。 .

这是我的 mosquitto.conf:

listener 1883 localhost

listener 8883
certfile /etc/letsencrypt/live/example.com/cert.pem
cafile /etc/letsencrypt/live/example.com/chain.pem
keyfile /etc/letsencrypt/live/example.com/privkey.pem

这是我的脚本,用于测试在 1883 年没有 TLS 的情况下可以正常工作的代理
client = mqtt.Client("test")
client.tls_set(certfile="./mqtt/cert.pem", keyfile="./mqtt/key.pem")
client.connect("example.com", 8883)

#publish file as zip
with open("./mqtt/20180319171000.gz", 'rb') as f:
byte_array = f.read()
m.update(byte_array)
file_hash = m.hexdigest()
payload_json = {'byte_array': byte_array, 'md5': file_hash}
client.publish("topic", pickle.dumps(payload_json), 0)
time.sleep(1)
client.disconnect()

TLS 的有效负载大小是否有限制,或者我的设置/脚本有问题?

最佳答案

这里的问题是 MQTT 客户端循环没有运行。
当负载大于单个 TCP 数据包的容量时,调用 client.publish()需要将消息的其余部分排队,然后将其分解为多个数据包并通过客户端循环发送。
正确的 react 是不要增加keepalive period。使用 python Paho 库有两种方法可以解决这个问题。
首先,您可以使用 Publish 类而不是 Client 类。这包括一个处理确保传递整个消息所需的所有后台任务的单一功能。

import paho.mqtt.publish as publish

tls_opt = {
'certfile':"./mqtt/cert.pem",
'keyfile':"./mqtt/key.pem"
}

with open("./mqtt/20180319171000.gz", 'rb') as f:
byte_array = f.read()
m.update(byte_array)
file_hash = m.hexdigest()
payload_json = {'byte_array': byte_array, 'md5': file_hash}
publish.single("topic", payload=pickle.dumps(payload_json), qos=0, hostname="example.com", port=8883, tls=tls_opt)
二是启动网络循环如下:
client = mqtt.Client("test")
client.tls_set(certfile="./mqtt/cert.pem", keyfile="./mqtt/key.pem")
client.connect("example.com", 8883)
client.loop_start()

#publish file as zip
with open("./mqtt/20180319171000.gz", 'rb') as f:
byte_array = f.read()
m.update(byte_array)
file_hash = m.hexdigest()
payload_json = {'byte_array': byte_array, 'md5': file_hash}
client.publish("topic", pickle.dumps(payload_json), 0)
time.sleep(1)
client.loop_stop()
client.disconnect()

关于ssl - Mosquitto TLS 设置自动有效负载大小限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49663424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com