MyTetra Share
Делитесь знаниями!
Решение проблемы 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


Но хотя бы работает, благодарю.


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования