MQTT и SSL / TLS

#ssl #openssl #mqtt #tls1.2 #mosquitto

#ssl #openssl #mqtt #tls1.2 #mosquitto

Вопрос:

Я зарегистрировал учетную запись на сервере поставщика mqtt. Они предоставляют 3 порта:

  • порт: 1xxxx
  • порт ssl: 2xxxx
  • веб-сокеты (только для TLS): 3xxxx

Я публикую и получаю данные с порта 1xxx.

Однако я хотел бы добавить шифрование. Поставщик сервера mqtt предоставляет «общий» поддомен, но говорит: если вы хотите использовать пользовательский домен для своего экземпляра, вы должны предоставить свой собственный сертификат для использования с MQTT TLS и Websockets. Сертификаты должны быть закодированы в PEM, а приватный ключ незашифрован. Сертификаты хранятся только в вашем выделенном экземпляре. Когда сертификаты установлены, вы можете указать свой домен как CNAME на hairdresser.cloudmqtt.com .

Я добавил CNAME на свою доменную панель, которую я называю (mqtt.mydomain.com ) и преобразуется в вышеупомянутый поддомен.

На панели моего домена я также добавил ssl из letsenrypt (бесплатно) в свой поддомен mqtt.mydomain.com (который указывает на домен сервера mqtt).

После добавления ssl я загрузил zip-файл с панели домена, который содержит 3 файла:

  1. mqtt.mydomain.com.ca
  2. mqtt.mydomain.com.cert
  3. mqtt.mydomain.com.key

Настройки MQTT SSL

Я вставляю содержимое файла ca в цепочку CA, файл сертификата в сертификат и файл ключа в закрытый ключ

Сохранил все и перезапустил экземпляр (сервер mqtt). Затем я попробовал со своего компьютера:

 mosquitto_pub -h "mqtt.mydomain.com" -p 1xxxx -i test1 -u test1 -P pass1 -t mytopics/test1 -m "hi everyone" -d -c
 

работает, но с его порта 1xxxx это не SSL.
Попытка ssl:

 mosquitto_pub -h "mqtt.mydomain.com" -p 2xxxx -i test1 -u test1 -P pass1 -t mytopics/test1 -m "hi everyone" -d -c --cafile C:UsersCTDownloadscertsmqtt.mydomain.com.ca
 

выдает ошибку в cmd:
Ошибка OpenSSL [0]: ошибка: 1416F086: Процедуры SSL: tls_process_server_certificate: проверка сертификата не удалась
Ошибка: произошла ошибка TLS.

Пробовал много разных команд, таких как передача файла сертификата из ca и даже файла ключа (что, вероятно, неправильно, я думаю), и я получаю разные ошибки в журналах сервера, такие как: Ошибка OpenSSL: ошибка: 14094418: процедура SSL

 s:ssl3_read_bytes:tlsv1 alert unknown ca 
OpenSSL Error: error:1408F10B:SSL routines:ssl3_get_record:wrong version number 
Client connection from xx.xx.xx.xx failed: error:1408F10B:SSL routines:ssl3_get_record:wrong version number.

 
 

Комментарии:

1. Убедитесь, что файл CA содержит полную цепочку. LetsEncrypt предоставляет 2 файла CA. Один с только сертификатом подписи и один с полной цепочкой от корневого центра сертификации до фактического сертификата подписи.