解決Qt5使用SSL的“qt.network.ssl: QSslSocket: cannot resolve SSLv2_client_method”錯誤


在使用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

忽略就可以了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM