我有一個 docker-compose 檔案,其中有一個 MQTT 容器和一個 python 應用程式容器。MQTT 容器必須能夠接受來自外部世界的通過 tls 和埠 8883 的連接。只有位于另一個 python 應用程式容器中的客戶端才能通過埠 1883 進行未加密的連接。
證書似乎沒問題。如果我只啟用偵聽器 8883,則通信正常。此外,如果我只啟用監聽器 1883,它也可以作業。只有當我一起使用我不作業。
問題是,當我放入組態檔時listener 8883 0.0.0.0,listener 1883 0.0.0.0我無法在埠 8883 上使用證書連接,也無法在埠 1883 上連接。
撰寫檔案:
version: '3.8'
services:
nginx-proxy:
.
.
networks:
- frontend
- mqtt
app:
.
.
networks:
- frontend
- backend
- mqtt
mqtt-8vv30kj5g5u4:
.
.
networks:
- mqtt
networks:
frontend:
name: frontend-network
backend:
name: backend-network
mqtt:
name: mqtt-network
我的 mosquitto.conf 檔案:
listener 8883 0.0.0.0
listener 1883 0.0.0.0
max_connections -1
protocol mqtt
certfile /mosquitto/config/certificates/server.crt
keyfile /mosquitto/config/certificates/server.key
crlfile /mosquitto/config/certificates/ca.crl
require_certificate true
cafile /mosquitto/config/certificates/ca.crt
allow_anonymous true
使用 tls 通過埠 8883 連接我SSLEOFError: EOF occurred in violation of protocol (_ssl.c:1129)在客戶端收到錯誤。代理中的 mosquitto.log 檔案說:
1654783087: New connection from 172.28.0.2:57262 on port 8883.
1654783087: Client <unknown> disconnected due to malformed packet.
通過埠 1883 連接不會引發錯誤。但是 mosquitto.log 檔案說:
1654783976: New connection from 172.28.0.6:38193 on port 1883.
1654783976: OpenSSL Error[0]: error:1404A42E:SSL routines:ST_ACCEPT:tlsv1 alert protocol version
1654783976: Client <unknown> disconnected: Protocol error.
您可能會看到錯誤嗎?
uj5u.com熱心網友回復:
mosquitto.conf 檔案中的順序很重要。
和
listener 8883 0.0.0.0
listener 1883 0.0.0.0
max_connections -1
protocol mqtt
certfile /mosquitto/config/certificates/server.crt
keyfile /mosquitto/config/certificates/server.key
crlfile /mosquitto/config/certificates/ca.crl
require_certificate true
cafile /mosquitto/config/certificates/ca.crt
allow_anonymous true
您已經listener 8883 0.0.0.0使用默認設定(根本沒有 ssl)和listener 1883 0.0.0.0 組態檔中的所有 SSL 配置進行了定義。
你可能想要的是這樣的:
per_listener_settings
listener 1883 0.0.0.0
allow_anonymous true
listener 8883 0.0.0.0
max_connections -1
certfile /mosquitto/config/certificates/server.crt
keyfile /mosquitto/config/certificates/server.key
crlfile /mosquitto/config/certificates/ca.crl
require_certificate true
cafile /mosquitto/config/certificates/ca.crt
allow_anonymous false
這會在埠 8883 上設定 SSL(并禁用匿名連接,因為您需要客戶端 SSL 證書)并允許在埠 1883 上進行匿名訪問
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/490863.html
