#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 файла:
- mqtt.mydomain.com.ca
- mqtt.mydomain.com.cert
- mqtt.mydomain.com.key
Я вставляю содержимое файла 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. Один с только сертификатом подписи и один с полной цепочкой от корневого центра сертификации до фактического сертификата подписи.