QT MQTT безопасное соединениеC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Гость
 QT MQTT безопасное соединение

Сообщение Гость »


Я настроил локальный сервер Mosquitto; Я могу подключиться к нему с помощью QT (5.15.0) MQTT без SSL.

Пытаясь настроить SSL, видел разные сообщения на эту тему. Я все еще не могу правильно установить соединение TLS с сервером.

Я могу подключиться к серверу Mosquitto, но он сообщает об ошибке сокета и отключается:

1598878059: запуск версии mosquitto 1.6.10 1598878059: Конфигурация загружена из .\mosquitto.conf. 1598878059: Открытие сокета прослушивания ipv6 на порту 8883. 1598878059: Открытие сокета прослушивания ipv4 на порту 8883. 1598878082: Новое соединение с 192.168.1.34 через порт 8883. 1598878082: Ошибка сокета на клиенте , отключение. Следует отметить, что клиент MQTT.fx может успешно взаимодействовать с той же локальной установкой/конфигурацией mosquitto, используя SSL/TLS и тот же сертификат. Только код Qt MQTT имеет проблему с ошибкой Socket.

Конфигурация mosquitto довольно проста:

# Порт, используемый для прослушивателя по умолчанию. порт 8883 # Должен быть определен хотя бы один из cafile или capath. Они оба # определить методы доступа к сертификату, закодированному PEM # Сертификаты центров сертификации, которые подписали сертификат вашего сервера # и которому вы хотите доверять. # cafile определяет путь к файлу, содержащему сертификаты CA. # capath определяет каталог, в котором будут искать файлы # содержащий сертификаты CA. Для корректной работы capath необходимо # файлы сертификатов должны иметь ".crt" в конце файла, и вы должны запустить # «openssl rehash » каждый раз, когда вы добавляете/удаляете сертификат. #кафиле #капат cafile C:\Program Files\mosquitto\certs\m2mqtt_ca.crt # Путь к сертификату сервера в кодировке PEM. файл сертификата C:\Program Files\mosquitto\certs\m2mqtt_srv.crt # Путь к ключевому файлу в кодировке PEM. ключевой файл C:\Program Files\mosquitto\certs\m2mqtt_srv.key На стороне клиента я вижу следующее:

"OpenSSL 1.1.1d, 10 сентября 2019 г." истинный «OpenSSL 1.1.1d, 10 сентября 2019 г.» Конфигурация SSL по умолчанию —Null: false Конфигурация SSL, используемая QNAM, isNull: true Состояние: подключение Состояние: Отключено 256 Код, который я использовал для проверки соединения:
#include #include #include #include #include #include #include #если 1 const QByteArray pem = R"(-----НАЧАТЬ СЕРТИФИКАТ ----- MIIC8DCCAlmgAwIBAgIJAOD63PlXjJi8MA0GCSqGSIb3DQEBBQUAMIGQMQswCQYD VQQGEwJHQjEXMBUGA1UECAwOVW5pdGVkIEtpbmdkb20xDjAMBgNVBAcMBURlcmJ5 MRIwEAYDVQQKDAlNb3NxdWl0dG8xCzAJBgNVBAsMAkNBMRYwFAYDVQQDDA1tb3Nx dWl0dG8ub3JnMR8wHQYJKoZIhvcNAQkBFhByb2dlckBhdGNob28ub3JnMB4XDTEy MDYYOTIyMTE1OVoXDTIyMDYyNzIyMTE1OVowgZAxCzAJBgNVBAYTAkdCMRcwFQYD VQQIDA5Vbml0ZWQgS2luZ2RvbTEOMAwGA1UEBwwFRGVyYnkxEjAQBgNVBAoMCU1v c3F1aXR0bzELMAkGA1UECwwCQ0ExFjAUBgNVBAMMDW1vc3F1aXR0by5vcmcxHzAd BgkqhkiG9w0BCQEWEHJvZ2VyQGF0Y2hvby5vcmcwgZ8wDQYJKoZIhvcNAQEBBQAD gY0AMIGJAoGBAMYkLmX7SQOT/jJCZoQ1NWdCrr/pq47m3xxyXcI+FLEmwbE3R9vM re6sRbP2S89pfrCt7iuITXPKycpUcIU0mtcT1OqxGBV2lb6RaOT2gC5pxyGaFJ+h A+GIbdYKO3JprPxSBORponZJvDGEZuM3N7p3S/lRoi7G5wG5mvUmaE5RAgMBAAGj UDBOMB0GA1UdDgQWBBTad2QneVztIPQzRRGj6ZHKqJTv5jAfBgNVHSMEGDAWgBTa d2QneVztIPQzRRGj6ZHKqJTv5jAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUA A4GBAAqw1rK4NlRUCUBLhEFUQasjP7xfFqlVbE2cRy0Rs4o3KS0JwzQVBwG85xge REyPOFdGdhBY2P1FNRy0MDr6xr+D2ZOwxs63dG1nnAnWZg7qwoLgpZ4fESPD3PkA 1ZgKJc2zbSQ9fCPxt2W3mdVav66c6fsb7els2W2Iz7gERJSX -----КОНЕЦ СЕРТИФИКАТА----- )"; #endif // Подключение к защищенному MQTT с помощью QtMqtt и SSL // https://stackoverflow.com/questions/578 ... tt-and-ssl int main(int argc, char *argv[]) { QCoreApplication а (argc, argv); // const QString hostname{"test.mosquitto.org"}; // Публичный тестовый сервер Mosquitto const QString имя хоста {"192.168.1.34"}; // Локальный тестовый сервер Mosquitto порт const quint16 = 8883; const QMqttTopicName theme{"qtmqtt/ssl_test"}; const QMqttTopicFilter фильтр {"qtmqtt/#"}; QSslCertificate cert = QSslCertificate(pem, QSsl::Pem); Конфигурация QSslConfiguration; // Начиная с QT 5.14, конфигурация транспорта SSL config.defaultConfiguration(); config.setProtocol(QSsl::TlsV1_2); // необходимо обрабатывать явно с помощью config.addCaCertificate(сертификат); // client.connectToHostEncrypted(config); config.setLocalCertificate(сертификат); клиент QMqttClient; client.setHostname(имя хоста); client.setPort(порт); QNetworkAccessManager qnam; запрос QNetworkRequest; QNetworkReply *reply = qnam.get(request); // Проверка работоспособности поддержки OpenSSL // https://stackoverflow.com/questions/586 ... tls-initia qDebug()
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»