3

Qtドキュメントのサンプルコードを使用してSSLサーバーを実装しようとしています。

しかし、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);
4

2 に答える 2

3

ドキュメントによると:

SSLサーバーソケットを作成する場合は、キーとローカル証明書の両方が必要です。

そして、それらを提供しない場合、「通常の」error(QAbstractSocket::SocketError)信号がソケットによって発行されます。ご存知のように、その場合、サーバーはデータを送信しません。

于 2013-01-06T16:00:06.647 に答える
0

SSHはSSLではありません。SSHクライアントはサーバーからの初期データを待機し、SSLクライアントは最初にデータを送信します。したがって、両方とも反対側からのデータを待っています。

于 2013-01-06T11:29:18.163 に答える