8

我在尝试使 QNetwork 类在 Ubuntu 18.04 上与 Qt5.11.1 一起工作时遇到问题

我的系统上安装了 openssl 1.1.0g 和 libssl-dev。

Qt 使用的 openssl 版本是 1.0.2k。我已经检查过QSslSocket::sslLibraryBuildVersionString()。加QSslSocket::supportsSsl()回报false

我试图解决这个问题,但我总是遇到这些错误:

qt.network.ssl: QSslSocket: cannot resolve CRYPTO_num_locks
qt.network.ssl: QSslSocket: cannot resolve CRYPTO_set_id_callback
qt.network.ssl: QSslSocket: cannot resolve CRYPTO_set_locking_callback
qt.network.ssl: QSslSocket: cannot resolve ERR_free_strings
qt.network.ssl: QSslSocket: cannot resolve EVP_CIPHER_CTX_cleanup
qt.network.ssl: QSslSocket: cannot resolve EVP_CIPHER_CTX_init
qt.network.ssl: QSslSocket: cannot resolve sk_new_null
qt.network.ssl: QSslSocket: cannot resolve sk_push
qt.network.ssl: QSslSocket: cannot resolve sk_free
qt.network.ssl: QSslSocket: cannot resolve sk_num
qt.network.ssl: QSslSocket: cannot resolve sk_pop_free
qt.network.ssl: QSslSocket: cannot resolve sk_value
qt.network.ssl: QSslSocket: cannot resolve SSL_library_init
qt.network.ssl: QSslSocket: cannot resolve SSL_load_error_strings
qt.network.ssl: QSslSocket: cannot resolve SSL_get_ex_new_index
qt.network.ssl: QSslSocket: cannot resolve SSLv3_client_method
qt.network.ssl: QSslSocket: cannot resolve SSLv23_client_method
qt.network.ssl: QSslSocket: cannot resolve SSLv3_server_method
qt.network.ssl: QSslSocket: cannot resolve SSLv23_server_method
qt.network.ssl: QSslSocket: cannot resolve X509_STORE_CTX_get_chain
qt.network.ssl: QSslSocket: cannot resolve OPENSSL_add_all_algorithms_noconf
qt.network.ssl: QSslSocket: cannot resolve OPENSSL_add_all_algorithms_conf
qt.network.ssl: QSslSocket: cannot resolve SSLeay
qt.network.ssl: Incompatible version of OpenSSL

我已经检查了多个关于此的问题和论坛,但似乎没有什么对我有用。有人知道吗?

4

4 回答 4

9

我终于设法使它工作。

我已经从源代码安装了 openssl 1.0.2k。我已经在这里下载了我需要的版本,并按照此页面上的教程进行操作。

这样做之后,我仍然有一些错误,但不是不兼容版本的错误。为了解决我已经安装的问题libssl1.0-dev,一切都很好(感谢这个人)。

我希望这会对某人有所帮助。

于 2018-09-06T19:01:33.107 回答
3

我已将libcrypto.soand libssl.so(v1.0.2) 复制到我当前的编译器 lib 目录 ( <QTDIR>/5.11.1/gcc_64/lib)。就我而言,我在/usr/lib/x86_64-linux-gnu/:libssl.so.1.0.0和中使用了这些 2 个库libcrypto.so.1.0.0,复制并重命名。它对我有用。

于 2018-09-13T18:24:06.633 回答
1

我解决了这个问题,通过这种方式创建了一个到 openssl 1.1.0 的符号链接:

在 /opt/f5/vpn/lib 中创建覆盖 libcrypto.so.1.0.0 和 libssl.so.1.0.0 的符号链接:

    sudo ln -sf /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 /opt/f5/vpn/lib/libcrypto.so.1.0.0 

    sudo ln -sf /usr/lib/x86_64-linux-gnu/libssl.so.1.1 /opt/f5/vpn/lib/libssl.so.1.0.0
于 2019-06-21T22:49:21.250 回答
1

我在 Ubuntu 16.04 上使用 Qt 5.13.1 时遇到了这个问题。

在我的 Qt 环境中和的值是QSslSocket::sslLibraryBuildVersionString()和。QSslSocket::supportsSsl()"OpenSSL 1.1.1b 26 Feb 2019"false

每次QNetworkAccessManager访问 https 地址时都会生成此输出:

qt.network.ssl: QSslSocket: cannot resolve OPENSSL_init_ssl
qt.network.ssl: QSslSocket: cannot resolve OPENSSL_init_crypto
qt.network.ssl: QSslSocket: cannot resolve ASN1_STRING_get0_data
qt.network.ssl: QSslSocket: cannot resolve EVP_CIPHER_CTX_reset
qt.network.ssl: QSslSocket: cannot resolve RSA_bits
qt.network.ssl: QSslSocket: cannot resolve OPENSSL_sk_new_null
qt.network.ssl: QSslSocket: cannot resolve OPENSSL_sk_push
qt.network.ssl: QSslSocket: cannot resolve OPENSSL_sk_free
qt.network.ssl: QSslSocket: cannot resolve OPENSSL_sk_num
qt.network.ssl: QSslSocket: cannot resolve OPENSSL_sk_pop_free
qt.network.ssl: QSslSocket: cannot resolve OPENSSL_sk_value
qt.network.ssl: QSslSocket: cannot resolve DH_get0_pqg
qt.network.ssl: QSslSocket: cannot resolve SSL_CTX_set_options
qt.network.ssl: QSslSocket: cannot resolve SSL_CTX_set_ciphersuites
qt.network.ssl: QSslSocket: cannot resolve SSL_set_psk_use_session_callback
qt.network.ssl: QSslSocket: cannot resolve SSL_get_client_random
qt.network.ssl: QSslSocket: cannot resolve SSL_SESSION_get_master_key
qt.network.ssl: QSslSocket: cannot resolve SSL_session_reused
qt.network.ssl: QSslSocket: cannot resolve SSL_set_options
qt.network.ssl: QSslSocket: cannot resolve TLS_method
qt.network.ssl: QSslSocket: cannot resolve TLS_client_method
qt.network.ssl: QSslSocket: cannot resolve TLS_server_method
qt.network.ssl: QSslSocket: cannot resolve X509_up_ref
qt.network.ssl: QSslSocket: cannot resolve X509_STORE_CTX_get0_chain
qt.network.ssl: QSslSocket: cannot resolve X509_getm_notBefore
qt.network.ssl: QSslSocket: cannot resolve X509_getm_notAfter
qt.network.ssl: QSslSocket: cannot resolve X509_get_version
qt.network.ssl: QSslSocket: cannot resolve X509_STORE_set_ex_data
qt.network.ssl: QSslSocket: cannot resolve X509_STORE_get_ex_data
qt.network.ssl: QSslSocket: cannot resolve OpenSSL_version_num
qt.network.ssl: QSslSocket: cannot resolve OpenSSL_version
qt.network.ssl: Incompatible version of OpenSSL
qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed

以上解决方案都不适合我。我在我的 Ubuntu 上安装了Homebrew包管理器,然后像这样安装了openssl@1.1

$ brew install openssl@1.1

然后我只是将这些行添加到我的项目文件中:

LIBS += -L/home/linuxbrew/.linuxbrew/Cellar/openssl@1.1/1.1.1c/lib -lssl -lcrypto
INCLUDEPATH += /home/linuxbrew/.linuxbrew/Cellar/openssl@1.1/1.1.1c/include

的值QSslSocket::sslLibraryBuildVersionString()仍然是旧值"OpenSSL 1.1.1b 26 Feb 2019",但值QSslSocket::supportsSsl()变成了true,它解决了我的问题。

于 2019-09-11T18:29:34.927 回答