Вызов QSslSocket :: startServerEncryption, но ничего не происходит

Я пытаюсь реализовать сервер SSL, используя пример кода из документации Qt.

Но после serverSocket->startServerEncryption(); называется, ничего не происходит — ни encrypted() ни sslErrors() сигналы испускаются (я поставил точки останова в слотах, подключенных к ним).

Я проверяю это, подключив QSslSocket с помощью connectToHostEncrypted в порт я слушаю. Сокет отправляет данные, но мой сервер не отвечает (я использую сниффер / прокси-сервер TCP, чтобы увидеть все данные, передаваемые от клиента к серверу и от сервера к клиенту).

Это мой код для сервера:

void SslServer::incomingConnection(int socketDescriptor)
{
qDebug() << "SslServer::incomingConnection()";
QSslSocket *serverSocket = new QSslSocket(this);
if (serverSocket->setSocketDescriptor(socketDescriptor)) {
connect(serverSocket, SIGNAL(encrypted()), this, SLOT(ready()));
connect(serverSocket, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(sslErrors(QList<QSslError>)));
serverSocket->startServerEncryption();
} else {
delete serverSocket;
}
}

И вот как я к нему подключаюсь:

server = new SslServer(this);
server->listen(QHostAddress::Any, 3333);
QSslSocket *socket = new QSslSocket(this);
socket->connectToHostEncrypted("127.0.0.1", 3333);

2

Решение

Согласно документация:

Ключ и локальный сертификат необходимы, если вы создаете сокет сервера SSL.

И если вы не предоставите их, «обычный» error(QAbstractSocket::SocketError) Сигнал испускается сокетом. Как вы узнали, сервер не отправляет никаких данных в этом случае.

2

Другие решения

SSH не является SSL. Клиент SSH ожидает исходных данных с сервера, а клиент SSL сначала отправляет данные. Так что они оба ждут данных с другой стороны.

0

По вопросам рекламы [email protected]