Я пытаюсь реализовать сервер 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);
Согласно документация:
Ключ и локальный сертификат необходимы, если вы создаете сокет сервера SSL.
И если вы не предоставите их, «обычный» error(QAbstractSocket::SocketError)
Сигнал испускается сокетом. Как вы узнали, сервер не отправляет никаких данных в этом случае.
SSH не является SSL. Клиент SSH ожидает исходных данных с сервера, а клиент SSL сначала отправляет данные. Так что они оба ждут данных с другой стороны.