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
私はそれについて複数の質問とフォーラムをチェックしましたが、何もうまくいかないようです。誰かが何か考えを持っていますか?
libcrypto.so
とlibssl.so
(v1.0.2)を現在のコンパイラのlibディレクトリ(<QTDIR>/5.11.1/gcc_64/lib
)にコピーしました。私の場合、これら2つのライブラリを/usr/lib/x86_64-linux-gnu/
:libssl.so.1.0.0
とlibcrypto.so.1.0.0
に入れ、コピーして名前を変更しました。それは私のために働いた。
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
_
上記の解決策のどれも私にとってはうまくいきませんでした。私は Homebrew パッケージマネージャーをUbuntuにインストールし、次に [email protected] を次のようにインストールしました:
_$ brew install [email protected]
_
次に、これらの行をプロジェクトファイルに追加しました。
_LIBS += -L/home/linuxbrew/.linuxbrew/Cellar/[email protected]/1.1.1c/lib -lssl -lcrypto
INCLUDEPATH += /home/linuxbrew/.linuxbrew/Cellar/[email protected]/1.1.1c/include
_
QSslSocket::sslLibraryBuildVersionString()
の値は以前の値_"OpenSSL 1.1.1b 26 Feb 2019"
_のままでしたが、QSslSocket::supportsSsl()
の値はtrue
になり、問題が解決しました。
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