Установив allow anonymous true
, каждый может публиковать в вашем брокере без аутентификации.
TLS не используется напрямую в брокерах MQTT, вам необходимо настроить MQTTS, который использует TLS.Чтобы использовать безопасное MQTT-соединение, ваш файл конфигурации Mosquitto, находящийся в /etc/mosquitto/mosquitto.conf, должен иметь следующие строки:
listener 8883
cafile <path-to-cafile>
certfile <path-to-server-cert>
keyfile <path-to-server-key-file>
, где <path-to-cafile>
, и должен быть заменен вашим абсолютнымпуть, по которому находится ваш файл ca, сертификат сервера, т. е. файл .pem и сертификат ключа сервера.
Например, в моем случае мой mosquitto.conf выглядит следующим образом:
pid_file /var/run/mosquitto.pid
persistence true
persistence_location /var/lib/mosquitto/
log_dest file /var/log/mosquitto/mosquitto.log
listener 1883
protocol mqtt
listener 8883
cafile /etc/ssl/certs/broker/ca.pem
certfile /etc/ssl/certs/broker/server.pem
keyfile /etc/ssl/certs/broker/server-key.pem
tls_version tlsv1.2
Сохраните эту конфигурацию и перезапустите mosquitto, используя вышеуказанную конфигурацию
Вы можете проверить ваше соединение TLSзапустив:
mosquitto_pub -t test -m test-message -p 8883 --cafile <path-to-your-ca-file> --insecure
В моем случае это:
mosquitto_pub -t test -m test-message -p 8883 --cafile /etc/ssl/certs/broker/ca.pem --insecure
Вам необходимо использовать - небезопасную опцию, поскольку все сертификаты являются самозаверяющими.Самозаверяющие серверные сертификаты не могут быть проверены клиентом mosquitto.Если вы не используете опцию - небезопасный , вы получите сообщение об ошибке
Error: host name verification failed.
OpenSSL Error: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed
Error: A TLS error occurred.
Чтобы настроить аутентификацию, создайте текстовый файл с содержимым
<user>:<password>
где - это место для имени пользователя, которое вы хотите разрешить, а - это место для пароля, который вы хотите установить
Например:
panda:black
создаст пользователя с именем panda, а пароль для пользователя panda будет black .Чтобы зашифровать пароль, запустите команду
mosquitto_passwd -U <path-to-passwordfile>
Теперь у вас будет такое содержимое:
panda:$6$a2foLssTVgMG4QY6$3rWvoLqwo1uCz6jZH6KDK3yAcWtIFlATbOSbwx7XJx2Q5Mix2S+iRqWI7KDqp43nSDdPV7mMvnYJS6tgHb7QjA==
Теперь добавьте эти две строки в файл конфигурации mosquitto
allow_anonymous false
password_file <path-to-passwordfile>
Перезапустите / перезагрузите брокер mosquitto, чтобы иметь полностью аутентифицированное соединение MQTTS
Чтобы опубликовать в брокере имя пользователя и пароль, используйте:
mosquitto_pub -t test -m test-message -p 8883 --cafile <path-to-ca-file> -u panda -P black --insecure