Настройка mosquitto MQTT-брокера для прослушивания на нескольких портах - PullRequest
0 голосов
/ 29 мая 2019

Я установил mosquitto на ПК с Win7, и я хочу, чтобы он мог прослушивать многие порты, поэтому я модифицировал mosquitto.conf в соответствии с документацией mosquitto и некоторыми учебными пособиями / примерами, найденными в Интернете. Это мои модификации, сделанные на mosquitto.conf:

    # Plain MQTT protocol
    listener 1883

    # MQTT over TLS/SSL
    listener 8883
    protocol mqtt
    require_certificate false

    # MQTT over TLS/SSL with certificates
    listener 8884
    protocol mqtt
    require_certificate true
    certfile cert.pem
    cafile chain.pem
    keyfile privkey.pem

    # Plain WebSockets configuration
    listener 9001
    protocol websockets

    # WebSockets over TLS/SSL
    listener 9883
    protocol websockets
    require_certificate true
    cafile mosquitto/ca.crt
    certfile mosquitto/hostname.crt
    keyfile mosquitto/hostname.key

    # Log system configuration
    log_type all 
    #log_dest file C:/Dati/mosquitto/mosquitto.log
    log_facility 5
    log_type error
    log_type warning
    log_type notice
    log_type information

к сожалению, с этими модификациями больше ничего не работает. Итак, мне нужно изучить рабочий пример, чтобы понять, что правильно, а что нет. Моя цель - заставить комара слушать порт 1883 (обычный MQTT без шифрования) 8883 (через TLS 1.2, но без использования сертификатов) 8884 (TLS 1.2 с использованием сертификатов) 9001 (простые веб-сокеты) и, наконец, 9883 (веб-сокеты, требующие сертификатов.

Я подозревал, что с сертификатами что-то не так, но следовал указаниям в отчете test.mosquitto.org:

Сервер прослушивает следующие порты:

  • 1883: MQTT, незашифрованный
  • 8883: MQTT, зашифровано
  • 8884: MQTT, зашифровано, требуется сертификат клиента
  • 8080: MQTT через WebSockets, в незашифрованном виде
  • 8081: MQTT через WebSockets, зашифровано

так что, похоже, не требуется сертификат клиента для подключения к порту 8883.

UPDATE Наконец, запустив mosquitto как простое приложение, а не как службу Windows, я вижу журнал stdio / stderr, и вот результат:

Вот как я начинаю комаров:

mosquitto -c mosquitto.conf -v

это команда тестирования для проверки комара на порту 8883 и ее результат:

mosquitto_pub --cafile C:\Dati\mosquitto\ca.crt -h 192.168.1.2 -t "test" -m "message" -p 8883
Error: Unknown error.

это тестовая команда для проверки комара на порту 1883 (последние строки в файле журнала):

mosquitto_pub -h 192.168.1.2 -t "test" -m "message" -p 1883

и это файл журнала:

    1559207712: mosquitto version 1.5.8 starting
    1559207712: Config loaded from mosquitto.conf.
    1559207712: Opening ipv6 listen socket on port 8883.
    1559207712: Opening ipv4 listen socket on port 8883.
    1559207712: Opening ipv6 listen socket on port 1883.
    1559207712: Opening ipv4 listen socket on port 1883.
    1559207731: New connection from 192.168.1.2 on port 8883.
    1559207731: Socket error on client <unknown>, disconnecting.
    1559207789: New connection from 192.168.1.2 on port 1883.
    1559207789: New client connected from 192.168.1.2 as MQTT_FX_Client (c1, k60).
    1559207789: No will message specified.
    1559207789: Sending CONNACK to MQTT_FX_Client (0, 0)
    1559207808: Received DISCONNECT from MQTT_FX_Client
    1559207808: Client MQTT_FX_Client disconnected.
    1559207902: New connection from 192.168.1.2 on port 8883.
    1559207902: Socket error on client <unknown>, disconnecting.
    1559207902: New connection from 192.168.1.2 on port 8883.
    1559207902: Socket error on client <unknown>, disconnecting.
    1559207949: New connection from 192.168.1.2 on port 8883.
    1559207949: Socket error on client <unknown>, disconnecting.
    1559207949: New connection from 192.168.1.2 on port 8883.
    1559207949: Socket error on client <unknown>, disconnecting.
    1559207956: New connection from 192.168.1.2 on port 8883.
    1559207956: Socket error on client <unknown>, disconnecting.
    1559207956: New connection from 192.168.1.2 on port 8883.
    1559207956: Socket error on client <unknown>, disconnecting.
    1559207994: New connection from 192.168.1.2 on port 8883.
    1559207994: Socket error on client <unknown>, disconnecting.
1559208345: New connection from 192.168.1.2 on port 1883.
1559208345: New client connected from 192.168.1.2 as mosqpub|7544-NOTEBOOK (c1, k60).
1559208345: No will message specified.
1559208345: Sending CONNACK to mosqpub|7544-NOTEBOOK (0, 0)
1559208345: Received PUBLISH from mosqpub|7544-NOTEBOOK (d0, q0, r0, m0, 'test', ... (7 bytes))
1559208345: Received DISCONNECT from mosqpub|7544-NOTEBOOK
1559208345: Client mosqpub|7544-NOTEBOOK disconnected.

Я сделал некоторые изменения в mosquitto.conf, пытаясь лучше понять ситуацию, и также обнаружил некоторые интересные вещи, используя mosquitto_pub, это соответствующая часть mosquitto.conf, которую я модифицировал:

# Log system configuration
log_type all 
#log_dest file C:\Dati\mosquitto\mosquitto.log    now stderr

# MQTT over TLS/SSL
listener 8893
protocol mqtt
allow_anonymous true
require_certificate false
cafile C:\Dati\mosquitto\ca.crt
certfile C:\Dati\mosquitto\server.crt
keyfile C:\Dati\mosquitto\server.key

# MQTT plain
listener 1893
protocol mqtt

на практике я запустил 2 новых прослушивателя на нестандартных портах, чтобы быть уверенным, что на них влияет только конфигурация в mosquitto.conf, поэтому без особых фантазий ... 1883 -> 1893 и 8883 -> 8893.

Затем, теперь выполняя mosquitto_pub без SSL, это (правильный) результат:

mosquitto_pub -h 192.168.1.2 -i "MQTT_FX_Client" -t "test" -m "message" -p 1893 -d
Client MQTT_FX_Client sending CONNECT
Client MQTT_FX_Client received CONNACK (0)
Client MQTT_FX_Client sending PUBLISH (d0, q0, r0, m1, 'test', ... (7 bytes))
Client MQTT_FX_Client sending DISCONNECT

и это (неправильный) результат выполнения mosquitto_pub с SSL на порту 8893:

mosquitto_pub --cafile C:\Dati\mosquitto\ca.crt -h 192.168.1.2 -i "MQTT_FX_Client" -t "test" -m "message" -p 8893 -d
Client MQTT_FX_Client sending CONNECT
OpenSSL Error: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed
Error: A TLS error occurred.

, но использование MQTT.fx работает со следующими параметрами: тип профиля: MQTT Broker Адрес брокера: 192.168.1.2 Порт брокера: 8893 Идентификатор клиента§: MQTT_FX_Client Включить SSL / TLS: да Протокол TLSv1.2 Файл сертификата CA: C: \ Dati \ mosquitto \ ca.crt

все работает как указано в журнале:

1559231176: New connection from 192.168.1.2 on port 8893.
1559231177: New client connected from 192.168.1.2 as MQTT_FX_Client (c1, k60).
1559231177: No will message specified.
1559231177: Sending CONNACK to MQTT_FX_Client (0, 0)

Мне кажется, что параметры MQTT.fx и mosquitto_pub одинаковы, но ... в любом случае что-то идет не так, что ... что еще?

Спасибо, Massimo

...