2017-08-15 33 views
0

Client + Serverアプリで問題が発生したため、今日あなたに来ました。私はQTcpSocketで正常に動作していたサーバーとクライアントアプリケーションを構築しましたが、いくつかのセキュリティを追加し、QSslSocket に遅れたハンドシェイクで行くことを考えました。問題は、私のクライアントが本当に不思議な行動をしていることです。ここでの状況は次のとおりです。QtによるSSLハンドシェイク中にエラーが発生しました

  • 私は私のクライアントにconnectToHostEncrypted()を使用して、それが正常に動作します私のincomingConnectionスロットにソケットをgeting後startServerEncryption()を呼び出す場合。
  • しかし、私は(ソケットでいくつかの読み取り/書き込みを行うことによって)握手を遅らせ、後でstartServerEncryption()を呼び出す場合、私はエラーを得た:Error during SSL handshake: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version numberサーバー側で。私もクライアント側でstartClientEncryption()を使用しようとしましたが、同じエラーが発生します。

証明書は自己署名され、サーバー上のソケットに正しくロードされ、適用されます(openssl s_clientを使用して最初の状況をテストし、サーバーは、SSLv3、TLSv1、 TLSv1.1、TLSv1.2)SSLv2でテストできません。クライアントでは、QSslSocket::setProtocol(QSsl::SslV2)でこのプロトコルを使用してエラーunsupported protocolを表示し、openssl s_clientは-ssl2引数で接続しません。利用可能な引数を表示します。

DLLを取得するために、私はQtの5.9.1を使用していると私は、OpenSSL-Win32のv1.0.2Lをインストールしている。私はまた、 。Windows 7の64bit版にmsvc2015 32ビットでコンパイルしてる私はあなたが私を助けることができることを願っています(と私のバのために申し訳ありませんd英語)、ニコラス。

答えて

1

私はちょうど私の誤りを見つけた:私はsocket->readAll()を使用して、それがSSLハンドシェイクを阻止されたreadyReadスロットを使用していました!また、SSLハンドシェイクを行うためにstartClientEncryptionとstartServerEncryptionの両方を呼び出す必要があることも発見しました。

関連する問題