LinuxForum.Fans
Тема

Проблемы при использовании SSL в QT

Автор: kryuch 3 сообщений 1385 просмотров
#287343

Добрый день.

Создал SSL-сервер SslServer:: public QTcpServer

text

void SslServer::incomingConnection(int handle)
{
    socket = new QSslSocket(this);
    if (socket->setSocketDescriptor(handle))
    {
        qDebug()<<"yes\t"<<socket;
        connect(socket, SIGNAL(encrypted()), this, SLOT(on_encrypted()));
        connect(socket, SIGNAL(readyRead()), this, SLOT(on_dataRead()));
        connect(socket, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(on_sslErrors(QList<QSslError>)));
        connect(socket,SIGNAL(disconnected()),this,SLOT(slotTCPServerDisconnected()));
        connect(socket,SIGNAL(readyRead()),this,SLOT(slotTCPServerReadyRead()));
        socket->setPrivateKey("/opt/terminus/share/cert/server.key", QSsl::Rsa);
        socket->setLocalCertificate("/opt/terminus/share/cert/server.crt");

socket->startServerEncryption(); emit message("New connection...\r\n"); foreach(QSslError err, socket->sslErrors()) { emit message(QString(err.errorString()).append("\r\n")); }

} else delete socket; }

при попытке подключиться

text
    socket = new QSslSocket();
    connect(socket, SIGNAL(connected()), SLOT(waitForGreeting()));
    connect(socket, SIGNAL(readyRead()), SLOT(readResponse()));
    connect(socket, SIGNAL(connectionClosed()), SLOT(quit()));
    connect(socket, SIGNAL(delayedCloseFinished()),SLOT(quit()));
    socket->setPrivateKey("/opt/terminus/share/cert/server.key", QSsl::Rsa);
    socket->setLocalCertificate("/opt/terminus/share/cert/server.crt");
    socket->connectToHost("127.0.0.1", 3428);

if (!socket->waitForEncrypted()) { qDebug() << socket->errorString(); } else { socket->write("GET / HTTP/1.0\r\n\r\n"); while (socket->waitForReadyRead()) qDebug() << socket->readAll().data(); }

выдается

text
"Unknown error" 

На сервере никаких ошибок не выводится.
Что я делаю неправильно?

#287400

Я не вникал внимательно, но сервер должен начать слушать порт, через который
будут происходить подключения. Это делается вызовом listen() с аргументами.

Пётр.

#287460
Peter написал:
Я не вникал внимательно, но сервер должен начать слушать порт, через который
будут происходить подключения. Это делается вызовом listen() с аргументами.

Разумеется, прослушивание есть

text

SslServer server;
server.listen(QHostAddress::Any, 3428)

клиент подключается, метод incomingConnection вызывается, сокет создается. Проблема начинается после, вероятно, я именно с SSL ошибаюсь.

Войдите или зарегистрируйтесь, чтобы ответить.