在使用Qt的網絡組件連接某些服務器時, 會提示“qt.network.ssl: QSslSocket: cannot resolve SSLv2_client_method”的錯誤, 導致連接失敗。
經查資料得知這是由於SSLv2由於某些漏洞導致的不安全原因, 在某些linux發行版里禁用掉了SSLv2。
解決辦法是自己重新編譯openssl,加上SSLv2的支持
1. 下載代碼:
git clone https://github.com/openssl/openssl.git
2. 編譯
我的測試結果是openssl1.1不工作,但是openssl1.0工作
git checkout OpenSSL_1_0_0-stable ./config enable-shared
make depend make -j4
3. Copy編譯結果到$QTDIR/lib, 我的目錄是/opt/Qt5.7.0/5.7/gcc_64/lib/
sudo cp libcrypto.so libssl.so libcrypto.so.1.0.0 libssl.so.1.0.0 /opt/Qt5.7.0/5.7/gcc_64/lib/
4. 從新運行應用, Qt pulgin會自動從新編譯的ssl libries里load符號
這時仍然會得到一些warning, 如
qt.network.ssl: QSslSocket: cannot resolve TLSv1_1_client_method
qt.network.ssl: QSslSocket: cannot resolve TLSv1_2_client_method
qt.network.ssl: QSslSocket: cannot resolve TLSv1_1_server_method
qt.network.ssl: QSslSocket: cannot resolve TLSv1_2_server_method
qt.network.ssl: QSslSocket: cannot resolve SSL_select_next_proto
qt.network.ssl: QSslSocket: cannot resolve SSL_CTX_set_next_proto_select_cb
qt.network.ssl: QSslSocket: cannot resolve SSL_get0_next_proto_negotiate
忽略就可以了