Как реализовать клиент ftp поверх tls с помощью qsslsocket? - PullRequest
1 голос
/ 27 марта 2019

В FTPS клиент подключается к серверу, сервер отправляет приветственное сообщение;таким образом, затем клиент отправляет команду «AUTH TLS», на сервере устанавливаются Certificate, PrivateKey и startServerEncryption;что клиент должен сделать, чтобы завершить это рукопожатие ssl?

Сервер:

if ("AUTH" == command && "TLS" == commandParameters.toUpper())
{
        auth();
}

void FtpControlConnection::auth()
{
    reply("234 Initializing SSL connection.");
    SslServer::setLocalCertificateAndPrivateKey(socket);
    socket->startServerEncryption();
}

void SslServer::setLocalCertificateAndPrivateKey(QSslSocket *socket)
{
    socket->setPrivateKey(":/ssl/server.key", QSsl::Rsa, QSsl::Pem, "1234");
    Q_ASSERT(!socket->privateKey().isNull());
    socket->setLocalCertificate(":/ssl/server.crt");
    Q_ASSERT(!socket->localCertificate().isNull());
}

void SslServer::incomingConnection(PortableSocketDescriptorType socketDescriptor)
{
    QSslSocket *socket = new QSslSocket(this);
    if (socket->setSocketDescriptor(socketDescriptor)) {
        addPendingConnection(socket);
    } else {
        delete socket;
    }
}

client

socket->connectToHost(hostNameEdit->text(), portBox->value());
socket->write("AUTH TLS\r\n");
socket->waitForConnected();
socket->startClientEncryption();
socket->waitForEncrypted();

Я хочу, чтобы клиент закончил встряхивание ssl с помощью startClientEncryption, а затем я мог бы использовать сокет клиента для отправки команды или файла;Но это не работает;Я знаю, что сокет клиента и сокет сервера уже подключены, но как добавить в него ssl?

...