Как заставить работать TLS в MQTT через порт 8883? - PullRequest
0 голосов
/ 25 сентября 2019

Мне нужна помощь, чтобы настроить этот MQTT для работы в режиме TLS .Я настроил MQTT на сервере.Сервер защищен letsencrypt сертификатом, поэтому он имеет https в своем домене , затем я установил его также на удаленном компьютере.

сервер запускает эту команду

mosquitto_sub -h localhost -t 'testtopic' -p 1883

удаленный компьютер запускает эту команду

mosquitto_pub -h domainName -t 'testtopic' -m "test message" -p 1883

конфигурация MQTT на обоих компьютерах выглядит следующим образом

pid_file /var/run/mosquitto.pid
persistence true
persistence_location /var/lib/mosquitto/
port 1883
persistence_file mosquitto.db
log_dest syslog
log_dest stdout
log_dest topic
log_type error
log_type warning
log_type notice
log_type information
connection_messages true
log_timestamp true
allow_anonymous true
tls_version tlsv1.2

этот работает.а как сделать связь в режиме TLS?Может кто-нибудь, пожалуйста, дайте мне знать, что это правильная конфигурация?как передать параметры на обоих компьютерах?

  • Я попытался изменить порт конфигурации на 8883
  • На обоих компьютерах я попытался передать - cafile , в результате чего кафе является .pem сертификатом , пришедшим с сервером , который был сгенерирован по letsencrypt .Поэтому я просто скопировал это и вставил на удаленный компьютер

Это те вещи, которые я пробовал до сих пор, но в Wireshark он вообще не может обнаружить связь TLS, и соединение отклоняется или что-тонеправильно с файлом CA

1 Ответ

1 голос
/ 25 сентября 2019

Установив 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
...