crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QSslSocket
512es
  опции профиля:
сообщение 3.12.2010, 12:24
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 135
Регистрация: 31.10.2008
Пользователь №: 407

Спасибо сказали: 5 раз(а)




Репутация:   0  


QTcpServer + QSslSocket + QDataStream Ака threaded fortune server.
Пытаюсь прикрутить SSL.. Сгенерировал сертификаты для клиента и для сервера.

Клиент:
tcpSocket->setLocalCertificate("cert/client.crt");
tcpSocket->setPrivateKey("cert/client.key");
tcpSocket->connectToHostEncrypted("localhost",7879);
if (!tcpSocket->waitForEncrypted()) {
    qDebug() << tcpSocket->errorString();
    return;
}


Сервер:
tcpSocket->setPrivateKey("cert/servers.key");
tcpSocket->setLocalCertificate("cert/server.crt");
........................
void slotStateChanged(QAbstractSocket::SocketState state)
{
    switch((int)state) {
    case 3: //QAbstractSocket::ConnectedState
        tcpSocket->startServerEncryption();
        break;
........................
    default:
        qDebug() << "Unknown state! ftom" << userID << tcpSocket->peerAddress().toString() << state;
        break;
    }
}


И сигналы\слоты:
connect(tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(slotSocketError(QAbstractSocket::SocketError)),Qt::DirectConnection);
connect(tcpSocket, SIGNAL(encrypted()), this, SLOT(socketEncrypted()));
connect(tcpSocket, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(sslErrors(QList<QSslError>)));



Что только не перепробовал.. В лучшем случае выдаётся ошибка QAbstractSocket::SocketError 13 (рукопожатия).

До sslErrors(QList<QSslError>) даже не доходит..

openssl установлен, проблемы в нём быть не должно. Qt собран с ssl.

Куда копать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Rocky
  опции профиля:
сообщение 10.12.2010, 12:55
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

Спасибо сказали: 22 раз(а)




Репутация:   7  


а переменная "tcpSocket" это QTcpSocket или QSslSoket?... Покажи больше кода чтоли... Может прояснится что..
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PAFOS
  опции профиля:
сообщение 27.12.2010, 20:11
Сообщение #3


Активный участник
***

Группа: Участник
Сообщений: 258
Регистрация: 27.12.2010
Из: Дмитров
Пользователь №: 2309

Спасибо сказали: 29 раз(а)




Репутация:   8  


С сервером все сложнее.... Вот пример SSL сервера:
Раскрывающийся текст
class SslServer : public QTcpServer
{
Q_OBJECT

public:
    SslServer():QTcpServer()
    {}

    QSslCertificate _cert;
    QSslKey _key;


    void incomingConnection(int socketDescriptor);
private slots:
    void ready();
    void sslError( const QList<QSslError> &);
};


void SslServer::incomingConnection(int socketDescriptor)
{
    QSslSocket *serverSocket = new QSslSocket;
    if (serverSocket->setSocketDescriptor(socketDescriptor)) {
        connect(serverSocket, SIGNAL(encrypted()), this, SLOT(ready()));
        connect(serverSocket,SIGNAL(sslErrors(QList<QSslError>)),this,SLOT(sslError(QList<QSslError>)));
        serverSocket->setPrivateKey(_key);
        serverSocket->setLocalCertificate(_cert);

        serverSocket->startServerEncryption();
    } else {
        delete serverSocket;
    }
}

void SslServer::ready()
{
    QSslSocket *serverSocket = dynamic_cast<QSslSocket*>(sender());
    addPendingConnection(serverSocket);
    emit newConnection();
}


void SslServer::sslError( const QList<QSslError> &e)
{
    foreach( const QSslError &er, e )
        qDebug() << er.errorString();
}


Имею ввиду что после отработки void SslServer::incomingConnection(int socketDescriptor) объект сервер вышлет сигнал newConnection(), где server->nextPendingConnection() вернет 0 указатель! - это надо проверять в классе, управляющем сервером

void ServerThread::newConnection()
{
        QTcpSocket *socket = server->nextPendingConnection();
        if( socket == 0 )
            return;

------------

как-то так)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 12.12.2024, 22:24