Настройка брокера mosquitto для прослушивания двух портов?

В настоящее время я создаю приложение на С#, используя брокера mosquitto для торговли mqtt, я могу подключить приложение через tcp (порт 1883) или через tls (порт 8883). Это делается с помощью настроек порта в файле conf, однако программа падает на любом порту, установленном в значении прослушивателя, поэтому работает только порт по умолчанию — я не знаю, позволю ли я пользователю выбрать tcp или tls, но Я хотел бы, чтобы это работало правильно.

РЕДАКТИРОВАТЬ:

# Config file for mosquitto
user mosquitto

port 8883

cafile /home/ubuntu/mosquitto-certs/ca/cacert.pem

certfile /home/ubuntu/mosquitto-certs/ca/requests/webservercert.pem

keyfile /home/ubuntu/mosquitto-certs/ca/requests/webserverkey.pem

tls_version tlsv1

listener 1883

persistence true

log_dest stderr

log_type error

log_type warning

log_type notice

log_type information

connection_messages true

log_timestamp true

auth_plugin /etc/mosquitto/auth-plug.so

auth_opt_host localhost

auth_opt_port 3306

auth_opt_user ****

auth_opt_pass *****

auth_opt_backends mysql

auth_opt_dbname test

auth_opt_userquery SELECT pw FROM users WHERE username = '%s' LIMIT 1

auth_opt_superquery SELECT IFNULL(COUNT(*), 0) FROM users WHERE username = '%s' AND super = 1

auth_opt_aclquery SELECT topic FROM acls WHERE username = '%s'

auth_opt_superusers S*

Вход через TLS

Работает нормально, если я вхожу в систему через TLS, однако, если я отключаюсь и пытаюсь войти в систему через TCP, я получаю следующую ошибку:

Первое исключение типа "System.IO.IOException" произошло в System.dll Первое исключение типа "uPLibrary.Networking.M2Mqtt.Exceptions.MqttConnectionException" произошло в M2Mqtt.Net.dll {"Невозможно прочитать данные из транспортного соединения: существующее соединение было принудительно закрыто удаленным узлом."

То же самое, если я переверну значения порта и прослушивателя.

Код для отключения:

if (_mqttClient != null && _mqttClient.IsConnected)
{
        _mqttClient.Disconnect();
        _mqttClient = null;

        SubscribeBtn.Enabled = false;
        UnSubBTN.Enabled = false;
        PublishBtn.Enabled = false;
        ConnectBtn.Enabled = true;
        UsernameTB.Enabled = true;
        PasswordTB.Enabled = true;

        DisplayBox.Items.Clear();
}

person dvn    schedule 24.08.2015    source источник
comment
Можете ли вы поделиться своим файлом конфигурации, а также журналом ошибок?   -  person kartben    schedule 25.08.2015
comment
@kartben Привет, я обновил вопрос и добавил как можно больше информации ..   -  person dvn    schedule 26.08.2015
comment
Вам не нужно указывать порт по умолчанию 1883, поэтому я бы посоветовал вам сделать следующее: пользователь mosquitto listener 8883 cafile /home/ubuntu/mosquitto-certs/ca/cacert.pem certfile /home/ubuntu/mosquitto-certs/ ca/requests/webservercert.pem ключевой файл /home/ubuntu/mosquitto-certs/ca/requests/webserverkey.pem tls_version tlsv1 persistence true ... Скажите, пожалуйста, имеет ли это значение   -  person kartben    schedule 26.08.2015
comment
@kartben спасибо за ответ, однако это не имело никакого значения, поскольку приложение по-прежнему аварийно завершает работу, когда я пытаюсь войти в систему без защиты.   -  person dvn    schedule 27.08.2015
comment
Даже когда вы пытаетесь войти в систему как незащищенный при первом открытии своего приложения (т.е. не после того, как сначала попробовали безопасный, возможно, оставив соединение в ожидании?). Но я предполагаю, что ваш код пользовательского интерфейса может содержать ошибки, пытаясь обеспечить безопасность независимо от содержимого флажка. Вы дважды проверили это?   -  person kartben    schedule 27.08.2015
comment
Да, я пробовал небезопасный вход в систему перед проверкой безопасности и наоборот после смены прослушивателя на другой порт (без настройки порта). Я не думаю, что это проблема с сокетом, клиент может подключаться только одним способом за раз. должен отключиться (именно поэтому я добавил этот метод) - если я установлю прослушиватель на 8883, клиент не запустит процесс рукопожатия, поэтому похоже, что сервер не прослушивает 1883 по умолчанию.. конечно, если я установлю их обоих с клиентом в режиме прослушивания соединение запускается отказом.. (и снова наоборот)   -  person dvn    schedule 27.08.2015


Ответы (2)


Я думаю, это звучит так, как будто виноват ваш клиент. Боюсь, это не похоже на проблему с комарами. Я бы посоветовал проверить настройку mosquitto с помощью клиентов mosquitto_sub и mosquitto_pub. Вы можете использовать их как для простых соединений TCP, так и для соединений TLS, например.

mosquitto_sub -p 1883 -h <host> -t '$SYS/#' -u <username> -P <password>

Или для TLS:

mosquitto_sub -p 8883 -h <host> -t '$SYS/#' -u <username> -P <password> --cafile <ca certificate>

Если они работают, вам нужно обратиться к вашей программе для решения проблемы.

person ralight    schedule 31.08.2015

На самом деле я заставил это работать, установив прослушиватель 1883 и прослушиватель 8883 с конфигурацией для SSL/TLS после безопасного прослушивателя.

Спасибо @ralight за брокера и @kartben за ответы.

person dvn    schedule 26.11.2015