Я пытаюсь создать клиент-серверное приложение, клиент, написанный на c ++ и QT, и сервер на java, но мне действительно тяжело пытаться заставить работать ssl-шифрование.Я думаю, что процесс терпит неудачу на уровне рукопожатия.Причина, по которой мне так трудно понять, почему он не работает, заключается в том, что, даже несмотря на сбой процесса, ни на клиенте, ни на сервере не сообщается об ошибках.Я использую следующую сторону клиента, в QT:
this->_uCertificate.fromPath(_DC::DEFAULT_CERT_MAIN_PATH + _DC::DEFAULT_MAIN_CERT_FILE);
this->_socket->addCaCertificate(this->_uCertificate);
//begin connection
this->_socket->connectToHostEncrypted(this->_uServerAdress, this->_uServerPort);
//wait until connection has completed
if(!this->_socket->waitForConnected(_CM::TIMEOUT))
{
this->_lastError = this->_socket->errorString();
return false;
}
//wait for handshake
if ( !this->_socket->waitForEncrypted(_CM::TIMEOUT) ) {
this->_lastError = this->_socket->errorString(); //the error is "No Error"
//return false;
}
Сбой при вызове "waitForEncrypted".Функция возвращает false, поэтому процесс завершился неудачно, но в строке ошибки указано «No Error».Я также добавил слот для обработки сигнала ошибки из сокета, но он никогда не вызывается.На стороне сервера я использую:
SSLSocket _sock = (SSLSocket) this._ssocket.accept();
_sock.startHandshake();
........................................
if(this._inputBuffered.read(this._messageBuffer) < 0)
throw new Exception("Error while reading from client");
Снова не генерируются исключения, но происходит сбой по команде чтения.Но на стороне сервера, я не уверен, если выдается исключение, если соединение / рукопожатие не удается, или я должен как-то вручную проверить на наличие ошибки.Раньше у меня возникала проблема в клиенте, когда я получал ошибку, что общее имя не соответствует хосту, поэтому, по крайней мере, я знаю, что соединение работает.После того, как я исправил сертификат, чтобы включить правильное общее имя, я получаю эту несуществующую ошибку.У кого-нибудь есть идея, почему он потерпит неудачу, или хотя бы лучший метод отладки?
Редактировать Я попытался подключиться с помощью openSSL, и это работает.Рукопожатие успешно, и я могу отправлять и получать пакеты с сервера.Так что проблема, похоже, в клиенте.