Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. [Qt5.4] QSslSocket server + client, handshake error
Qt 6.11 is out! See what's new in the release blog

[Qt5.4] QSslSocket server + client, handshake error

Scheduled Pinned Locked Moved General and Desktop
2 Posts 1 Posters 1.4k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • K Offline
    K Offline
    kolegs
    wrote on last edited by
    #1

    Hi,

    I am trying to write SSL server and client to communicate between each-other.
    I got an error when trying to connect, server response with unknow error and client gives handshake error.
    The code for connection is below:
    SERVER:
    @void MyThread::run()
    {
    // thread starts here
    qDebug() << " Thread started";

    socket = new QSslSocket();
    socket->setProtocol(QSsl::SslV3);
    
    QByteArray key;
    QByteArray cert;
    
    QFile file_key(":/server.key");
    if(file_key.open(QIODevice::ReadOnly))
    {
        key = file_key.readAll();
        file_key.close();
    }
    else
    {
        qDebug() << file_key.errorString();
    }
    
    QFile file_cert(":/server.crt");
    if(file_cert.open(QIODevice::ReadOnly))
    {
        cert = file_cert.readAll();
        file_cert.close();
    }
    else
    {
        qDebug() << file_cert.errorString();
    }
    
    
    QSslKey ssl_key(key, QSsl::Rsa,QSsl::Pem,QSsl::PrivateKey,"server");
    
    QSslCertificate ssl_cert(cert);
    
    socket->addCaCertificate(ssl_cert);
    socket->setLocalCertificate(ssl_cert);
    socket->setPrivateKey(ssl_key);
    
    
    // set the ID
    if(!socket->setSocketDescriptor(this->socketDescriptor))
    {
        // something's wrong, we just emit a signal
        emit error(socket->error());
        return;
    }
    ssl(socket);
    connect(socket,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(error2(QAbstractSocket::SocketError)));
    connect(socket,SIGNAL(sslErrors(QList<QSslError>)),this,SLOT(sslErrors(QList<QSslError>)));
    socket->startServerEncryption();
    qDebug() << socket->waitForEncrypted(30000);
    
    // connect socket and signal
    // note - Qt::DirectConnection is used because it's multithreaded
    //        This makes the slot to be invoked immediately, when the signal is emitted.
    
    connect(socket, SIGNAL(readyRead()), this, SLOT(readyRead()), Qt::DirectConnection);
    connect(socket, SIGNAL(disconnected()), this, SLOT(disconnected()), Qt::DirectConnection);
    
    // We'll have multiple clients, we want to know which is which
    qDebug() << socketDescriptor << " Client connected";
    
    exec&#40;&#41;;
    

    }
    @

    CLIENT:
    @ socket->setProtocol(QSsl::SslV3);

    QByteArray key;
    QByteArray cert;
    
    QFile file_key(":/server.key");
    if(file_key.open(QIODevice::ReadOnly))
    {
        key = file_key.readAll();
        file_key.close();
    }
    else
    {
        qDebug() << file_key.errorString();
    }
    
    QFile file_cert(":/server.crt");
    if(file_cert.open(QIODevice::ReadOnly))
    {
        cert = file_cert.readAll();
        file_cert.close();
    }
    else
    {
        qDebug() << file_cert.errorString();
    }
    
    
    QSslKey ssl_key(key, QSsl::Rsa,QSsl::Pem,QSsl::PrivateKey,"server");
    
    QSslCertificate ssl_cert(cert);
    
    socket->addCaCertificate(ssl_cert);
    socket->setLocalCertificate(ssl_cert);
    socket->setPrivateKey(ssl_key);
    socket->connectToHostEncrypted("192.168.50.109", port);
    qDebug() << socket->waitForEncrypted();
    qDebug() << socket->error();
    

    @

    Any ideas what I do wrong?
    Thanks

    1 Reply Last reply
    0
    • K Offline
      K Offline
      kolegs
      wrote on last edited by
      #2

      Can it be a problem that I signed certificate by myself?

      1 Reply Last reply
      0

      • Login

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved