在 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;
}
}
客户
socket->connectToHost(hostNameEdit->text(), portBox->value());
socket->write("AUTH TLS\r\n");
socket->waitForConnected();
socket->startClientEncryption();
socket->waitForEncrypted();
我希望客户端使用 startClientEncryption 完成 ssl 握手,然后我可以使用客户端套接字发送命令或文件;但它不起作用;我知道客户端套接字和服务器套接字已经连接,但是如何在此添加 ssl?