Как я могу использовать 2FA (двухфакторную аутентификацию) при подключении нового устройства к брокеру, если это вообще возможно?
Поскольку это кажется более простым, вторым фактором может быть сначала программное решение, но я бы приветствовал идеи о том, как ввести жесткие токены (возможно, RFID).
Было бы целесообразно, чтобы устройства аутентифицировались только при первом подключении, а сервер запомнил «старых» клиентов.
Идея может быть необычной или неподходящей - если это плохая идея, пожалуйста, укажите причины.
security
mqtt
authentication
Бенс Кауликс
источник
источник
Ответы:
Вам нужен посредник-посредник или веб-сервер ...
Прежде всего, вам абсолютно необходима служба аутентификации, подключенная к вашему брокеру, для выполнения 2FA с использованием определенных тем (
/auth/RFID
, ...). Это позволит клиенту публиковать информацию (см. Ниже).Первая проблема, которую я вижу здесь, заключается в том, что любой, кто подписан на эту тему, может прочитать информацию по этой теме, но вы можете заблокировать темы !
Затем вы можете указать (заставить) все ваши устройства публиковать информацию
/proxy/mytopic
. С помощью функции clientId в mqtt служба аутентификации может проверить, отправляются ли сообщения, отправленные из этой темы, с устройства, прошедшего проверку подлинности, который ранее использовал 2FA, а затем опубликовать собственное сообщение от имени устройства/proxyout/mytopic
с идентификатором устройства в полезной нагрузке.Теперь проблема заключается в проверке устройств, которые могут получать сообщения, если они аутентифицированы, потому что, в общем, MQTT - это массовая публикация. Служба аутентификации должна иметь список аутентифицированных устройств и проверить, имеют ли они право на прием. Опять же, шифрование полезной нагрузки и дешифрование на стороне устройства ...
Я думаю, что мое решение сильно превосходит возможности MQTT. Поэтому вы должны использовать сокет или веб-сервер ...
источник
Предстоящая спецификация MQTT v5 добавляет поддержку
AUTH
пакета управления, что позволяет выполнять аутентификацию по запросу / ответу. Поскольку MQTT v5 еще не завершена, поддержка может все еще измениться, но кажется разумным предположить, что AUTH останется в той или иной форме и что 2FA можно добавить с его помощью.Вы можете увидеть текущие рабочие проекты спецификации на странице документов комитета OASIS MQTT .
источник
Согласно спецификации, сообщение о соединении может дополнительно содержать имя пользователя и пароль. Это проверяется на соответствие списку ACL, сохраненному где-то на брокере. Итак, это ваш первый фактор аутентификации, который вы можете использовать. Сообщение CONNACK от брокера ответит, если аутентификация прошла.
Для реализации второго фактора аутентификации лучше всего отправить пользовательское сообщение о соединении с другим фактором. Сообщение CONNACK в этом случае должно ссылаться на успех или неудачу второго фактора аутентификации. Следовательно, брокер и клиент должны реализовывать пользовательские сообщения сверх спецификации.
источник
Для достижения 2FA в сети MQTT я создал следующие сервисы для аутентификации, которые подключены к брокеру.
Когда клиент MQTT подключается к брокеру по протоколу SSL / TLS, он сначала публикует свой собственный идентификатор в теме device_id , верификатор идентификатора проверяет, является ли он подлинным клиентом, и затем вызывается генератор токенов, который генерирует токен и публикует токен в заблокированной теме device_token .
Клиентское устройство получает этот токен и затем публикует его в теме verify_token . Как только тема опубликована в verify_token, верификатор токенов сравнивает значения в теме device_token и verify_token, если он совпадает, добавляет идентификатор устройства в проверенный пул устройств и позволяет устройству публиковать данные. Это повышает безопасность, потому что только проверенные устройства подключаются к темам для публикации данных.
Я также использовал опцию конфигурации MQTT_KEEPALIVE, чтобы клиент оставался активным, когда данные не отправляются или не принимаются, чтобы сохранить клиентское устройство живым в пуле устройств и предотвратить его повторную проверку после добавления в пул устройств. однако в целях безопасности я перевожу устройство на 2FA каждые 24 часа.
источник