2017-08-15 79 views
0

今天我來找你,因爲我的客戶端+服務器應用程序出現問題。我構建了一個服務器和客戶端應用程序,它們與QTcpSocket一起工作正常,但我想過要增加一些安全性,並考慮延遲握手時間爲QSslSocket 。問題是我的客戶行爲真的很奇怪。這裏的情況是:SSL握手過程中出錯qt

  • 如果我在客戶端使用connectToHostEncrypted(),只是歌廳在我incomingConnection插槽插座能正常工作後打電話startServerEncryption()
  • 但是,如果我延遲握手(通過在套接字中進行一些讀/寫操作)並稍後調用startServerEncryption(),我在服務器端得到了錯誤:Error during SSL handshake: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number。我也嘗試在客戶端使用startClientEncryption(),但我得到相同的錯誤。

證書是自簽名和裝載配方並應用於插座正確地在服務器上(我檢查通過測試使用OpenSSL的s_client.First第一種情況下,服務器接受所有,我可以(SSLv3的,使用TLSv1測試協議, TLSv1.1,TLSv1.2)。我無法使用SSLv2進行測試:在客戶端上,使用此協議並使用QSslSocket::setProtocol(QSsl::SslV2)顯示錯誤unsupported protocol並且openssl s_client不會與-ssl2參數連接,它只顯示可用參數。

我正在使用Qt 5.9.1,並且我已經安裝了OpenSSL-Win32 v1.0.2L來獲取dll,並且我正在使用Windows 7 64bit上的msvc2015 32位編譯器 我希望你能幫助我(和對不起我的爸爸d英語),尼古拉斯。

回答

1

我剛剛發現我的錯誤:我正在使用一個readyRead插槽,它正在使用socket->readAll(),並且阻止了SSL握手!我還發現你需要調用startClientEncryption和startServerEncryption來進行SSL握手。