调用QSslSocket::startServerEncryption,但没有任何反应。

4
我正在尝试使用Qt文档中的示例代码实现SSL服务器。但是,在调用serverSocket->startServerEncryption();之后,什么也没有发生 - encrypted()sslErrors()信号都没有被触发(我已经在与它们连接的槽中设置了断点)。
我通过使用connectToHostEncrypted将QSslSocket连接到我监听的端口进行测试。套接字发送数据,但我的服务器没有响应(我使用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个回答

4
根据文档
如果你创建一个SSL服务器套接字,则需要提供密钥和本地证书。如果你未提供它们,则套接字会发出一个“常规”error(QAbstractSocket::SocketError)信号。正如你所发现的那样,服务器在这种情况下不会发送任何数据。

谢谢,我原本以为连接 sslErrors 就足够了。我连接了 error 信号,它发出了一个 QAbstractSocket::UnknownSocketError 错误。 - sashoalm
我使用QSslSocket::errorString查明了更多有关错误的信息。我现在已经编辑了我的问题。 - sashoalm

0

SSH不是SSL。 SSH客户端等待服务器的初始数据,而SSL客户端首先发送数据。 因此,它们都在等待另一方的数据。


谢谢指出。我已经编辑了我的问题,现在我正在尝试使用QSslSocket :: connectToHostEncrypted,但问题仍然存在。此外,现在我确定客户端确实发送数据,因为我正在记录TCP连接的所有数据。 - sashoalm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接