Я разрабатываю приложение, которое, в итоге, использует MQTT для отправки значений датчика брокеру, чтобы впоследствии визуализировать эти данные в веб-приложении панели мониторинга. У меня есть пять микроконтроллеров, подключенных к брокеру, и я настроил серверный сертификат для брокера и клиентские сертификаты для каждого микроконтроллера.
Проблема в том, что в файле mosquitto.conf мне требуется использование клиентских сертификатов для клиентов, которые хотят подключиться, поэтому, если я хочу подписаться на topi c из своего веб-приложения, мне нужно сертификат клиента. Я пытаюсь найти правильный подход для достижения этой цели, но кажется, что наличие сертификата и ключа в машине, которую вы не можете контролировать, представляет большую угрозу безопасности.
Было бы идеально, если бы кто-то знал способ настройки файла конфигурации mosquitto или установил sh какое-то исключение (возможно, похожее на ACL), требующее только клиентские сертификаты для определенных клиентов (в моем случае, микроконтроллеры) и использовать username@password для других (веб-клиенты). Можно ли сделать такую вещь?
Любая помощь будет высоко ценится
РЕДАКТИРОВАТЬ (относительно ответа @hardillb)
Мой комар .conf:
pid_file /var/run/mosquitto.pid
persistence true
persistence_location /var/lib/mosquitto/
log_dest file /var/log/mosquitto/mosquitto.log
include_dir /etc/mosquitto/conf.d
per_listener_settings true
listener 9873
protocol websockets
#http_dir /home/jamengual/Desktop/UIB/TFG/mqtt/webAPP
cafile /etc/mosquitto/ca_certificates/ca.crt
keyfile /etc/mosquitto/certs/server.key
certfile /etc/mosquitto/certs/server.crt
listener 8883
cafile /etc/mosquitto/ca_certificates/ca.crt
keyfile /etc/mosquitto/certs/server.key
certfile /etc/mosquitto/certs/server.crt
require_certificate true
"per_listener_settings true" переводит сервер go в активное (выходное) состояние. Из руководства mosquitto.conf:
Говоря о механизмах аутентификации:
Шифрование на основе сертификатов и PSK настраивается для каждого слушателя.
Говоря о параметрах per_listener_settings:
per_listener_settings [ true | false ]
If true, then authentication and access control settings will be controlled on a per-listener basis. The following options are affected:
password_file, acl_file, psk_file, allow_anonymous, allow_zero_length_clientid, auth_plugin, auth_opt_*, auto_id_prefix.
Так что я понимаю, что параметр per_listener_settings может быть необязательным для части require_certificate. Однако мне все еще нужно настроить имена пользователей и пароли для веб-сокетов.
Что-то не так с моим файлом конфигурации?
Ссылка на мой вопрос о том, как хранить клиентские сертификаты и ключи в машине клиента