|
|||||||
Решение проблемы QNetworkAccessManager, HTTPS и OpenSSL в 2018 году
Время создания: 14.07.2018 19:20
Текстовые метки: qt, libssl, openssl, https, QNetworkAccessManager
Раздел: Компьютер - Программирование - Язык C++ (Си++) - Библиотека Qt - Инсталляция Qt и сборка проектов
Запись: xintrea/mytetra_syncro/master/base/1531585242umcg0ww5tr/text.html на raw.github.com
|
|||||||
|
|||||||
В Qt5 (вполоть до Qt 5.10) с некоторых пор появилась проблема: QNetworkAccessManager не может полноценно работать с openssl 1.1.0f-3+deb9u2, и поэтому не работает получение данных по HTTPS протоколу. Ошибки примерно такие: 13:03:19 [WRN] QSslSocket: cannot call unresolved function SSLv23_client_method 13:03:19 [WRN] QSslSocket: cannot call unresolved function SSL_CTX_new 13:03:19 [WRN] QSslSocket: cannot call unresolved function SSL_library_init 13:03:19 [WRN] QSslSocket: cannot call unresolved function ERR_get_error 13:03:19 [WRN] QSslSocket: cannot call unresolved function ERR_get_error Проблема решается так: необходимо установить в систему более старую библиотеку libssl1.0.2. В Debian Linux 9 две эти версии библиотеки libSSL без проблем устанавливаются параллельно через менеджер пакетов. И нужно заставить программу использовать более старую версию libSSL. Вот пример решения: https://www.linux.org.ru/forum/development/14233348 Цитата из обсуждения: Хм, в моем случае из пакета libssl1.0.2 устанавливаются файлы: /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.2 /usr/lib/x86_64-linux-gnu/libssl.so.1.0.2 Есть еще каталог /usr/lib/x86_64-linux-gnu/openssl-1.0.2 Но в нем линков нет, только подкаталог engines. Сделал в нем линки вручную: ln -s ../libcrypto.so.1.0.2 libcrypto.so ln -s ../libssl.so.1.0.2 libssl.so Запускаю бинарь NetworkManagerDemo командой, в которой предварительно устанавливается переменная окружения LD_LIBRARY_PATH: LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/openssl-1.0.2/:$LD_LIBRARY_PATH ./NetworkManagerDemo В таком виде заработало, только в выхлопе появляются предупреждения: qt.network.ssl: QSslSocket: cannot resolve SSLv3_client_method qt.network.ssl: QSslSocket: cannot resolve SSLv3_server_method Но хотя бы работает, благодарю. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|