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. https request with self signed certificate
Forum Updated to NodeBB v4.3 + New Features

https request with self signed certificate

Scheduled Pinned Locked Moved Unsolved General and Desktop
3 Posts 2 Posters 1.2k Views 2 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.
  • I Offline
    I Offline
    Infinity
    wrote on last edited by
    #1

    Hello everyone

    I would like to make a https get request to a server which has a self signed certificate. When I do the request with curl it looks like this and it returns the correct values:

    curl -G -k -H 'Accept: application/json' -H "Authorization: Bearer ${AuthoToken}" https://123.123.123.123:xx/api/users
    

    The AuthoToken is stored in an environment variable.

    Ho can I implement this in my Qt Application? I tried around for several hours with QNetworkRequest and QSslSocket, but somehow I cannot figure out how to get it working. The certificate of the server looks something like this. I copied it into a cert.pem file.

    -----BEGIN CERTIFICATE-----
    MIIFozCCA4ugAwIBAgIJAJlqb0yOOzbYMA0GCSqGSIb3DQEBDAUAMGQxCzAJBgNV
    BAYTAmNoMRgwFgYDVQQDDA92ei1hcmNhLTEubG9jYWwxFTATBgNVBAoMDEFSQ0FU
    cnVzdCBTQTEkMCIGA1UECwwbYXJjYS0wLjAuMC4wIGdlbmVyYXRlZCBjZXJ0MB4X
    DTE5MDMyMjExNTAyOVoXDTIwMDMyMTExNTAyOVowZDELMAkGA1UEBhMCY2gxGDAW
    BgNVBAMMD3Z6LWFyY2EtMS5sb2NhbDEVMBMGA1UECgwMQVJDQVRydXN0IFNBMSQw
    IgYDVQQLDBthcmNhLTAuMC4wLjAgZ2VuZXJhdGVkIGNlcnQwggIiMA0GCSqGSIb3
    DQEBAQUAA4ICDwAwggIKAoICAQCbGyFGKZCMvfgNZL/Q5RwYVpWTdNYfPTZdkfnn
    /4beMdhAF00yQF3bK8dbYaReJ+9x/fOZ1KdnqVkQoiDNoNNfx9GJHSZKO5tg1yep
    21dInG3K8Zu+Ror7//J5jxMyd9KfAFbDfydRvOiyCQIhxfu6/BnpHdGzHYmhjhsD
    uYdblMHhetzhip3WQJqw51mp3Mr86okpAnoev3kWDTtfR+fKhIcLJCt7fIyyIzh4
    A7/GydogOA3rLyK/y8YFytP+aTVVtmOYHZkFl/4TU1HKDKOsa2uq+YxuW6d0kd4+
    ymBfgaTxpMEbOSJoSf+lYX7Fmn722baljO/rV2n/cwbGH/FLHaANzETJ8UpVutNv
    wq4NgFr6qaDl2wOJdH+JMp6Q+4R+EfEbut08auSJEtfh4enf1VYdPcBuSr4XZy1i
    1r3o3eR0J5HzcDtLPWXGe1GXFHSRmGIobPLiFVeTclQNOleTq2EW9Xdnl+AdvRke
    WEnVA3g9XFf+jqLWLa8yAQ7U++wRiua/SuBuyDxzSVIlXOe6CcK7mZQVkoDTe9i2
    EyUcKFYC6HYhxfccmwwyrG29WykSpnkQArBEyD6L9MdN7mb428IXcGVIxbZfxTpm
    zN52Q/dFFY8R0bkzDQtZM02luadsfpzl9gXfq5itqlhE4uIBWSIv36rVvOnRMMHxLoFJ
    RDSQ9wIDAQABo1gwVjBUBgNVHREETTBLgglsb2NhbGhvc3SCD3Z6LWFyY2EtMS5s
    b2NhbIIJdnotYXJjYS0xhxAAAAAAAAAAAAAAAAAAAAABhwR/AAABhwQKFAJlhwSp
    /qn+MA0GCSqGSIb3DQEBDAUAA4ICAQAlSaON4Qbo9c/CNtlP3jMke1oh4m7vqLGa
    RcuqOXWGaRIdZ7Hl9uuIylasdadfLIwCne9hQYJ+XuEO965IXulUEV/AezVrUvbvDX2g9l
    fEb2bHGfT9R6zDp5w7gO0QkXrBasdfHrz8tOSEW+GHewvLNGjysFR2R3gq07pJFESMHg
    KrJkO2AOgaOyUMl4yuPDmMUjZt9b8KgF6bhvLxZgSBsgNBGxCGTAanQ1AAVFLk/3
    fAyYt85Ao7NpFLkDLBAkBHrp8GepZnFzUk891pWkxHgbDsu4Es6H52RzhTRjfFuu
    un0mjauWhlvFDf0jq8+sjVS8lQ0wctJ0Mt7zSjA7FinOmv8rxhrOY0MvscTZ9v5X
    sDmJat5+XvPPoof1+TdpXeOoHfNbNv0CSXTQtbHuA6vQIejY9lNDMPqwyN7kzjd/
    BsgH7v35rMUNi6/Fb+ofrzI3OpzGWiQwEZ+xqAzkfB7nNrAVa8SGpv7ifFG0W97A
    4IOQ8HsVYv8iQuSQ/L5L0NpBQKptaAaHbYOwkcdCelCQ++JP11Q7xei5c4CFj37H
    byj+tXrTRfg9zWmpAts6Tg9gXDasdf6gdF98+fzIIa21Sw/469+c1APx15YC+A5PBb/H
    Dgf9olHEOL1ZF9PXVM+uJl8ZX7xAasfdY6CCV4jMuKOd0iQ9dDvdavHOaARGW+VxpdE2
    b2iudep5VQ==
    -----END CERTIFICATE-----
    

    The request should return a JSON Object which I can process in my application.

    openSSL seem to work. When I call:

    qDebug() << "openSSL Version:" << QSslSocket::sslLibraryBuildVersionString();
    

    I get the following output:

    openSSL Version: "OpenSSL 1.1.1c  28 May 2019"
    

    Thanks for your help

    1 Reply Last reply
    0
    • SGaistS Offline
      SGaistS Offline
      SGaist
      Lifetime Qt Champion
      wrote on last edited by
      #2

      Hi,

      What exact error are you getting from the socket ?

      Interested in AI ? www.idiap.ch
      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

      1 Reply Last reply
      0
      • I Offline
        I Offline
        Infinity
        wrote on last edited by Infinity
        #3

        That is my test applikation:

        MainWindow::MainWindow(QWidget *parent) :
            QMainWindow(parent),
            ui(new Ui::MainWindow)
        {
            ui->setupUi(this);
        
            qDebug() << "openSSL Version:" << QSslSocket::sslLibraryBuildVersionString();
        
            QSslSocket *socket = new QSslSocket(this);
            connect(socket, SIGNAL(encrypted()), this, SLOT(ready()));
        
            QString certPath = "/home/xyz/src/qtsrc-5.13/socket/cert.pem.txt";
            QSslCertificate certificate = getCertificate(certPath);
            QList<QSslCertificate> certificates;
            certificates << certificate;
        
            socket->addCaCertificate(certificate);
        
            QSslConfiguration config = socket->sslConfiguration();
            QList<QSslCertificate> sockeCertificates = config.caCertificates();
            qDebug() << "Number of Certificates" << sockeCertificates.size();
            qDebug() << "isNull:" << sockeCertificates.at(0).isNull();
            qDebug() << "isSelfSigned:" << sockeCertificates.at(0).isSelfSigned();
        
            /*
            config.setCaCertificates(certificates);
            socket->setSslConfiguration(config);
            */
        
            socket->connectToHostEncrypted("1.1.1.1", 1163);
            if (!socket->waitForEncrypted()) {
                qDebug() << "Socket Error:" << socket->errorString();
            }
        
            socket->write("GET / HTTP/1.0\r\n\r\n");
            while (socket->waitForReadyRead())
                qDebug() << socket->readAll().data();
        }
        
        MainWindow::~MainWindow()
        {
            delete ui;
        }
        
        void MainWindow::ready()
        {
            qDebug() << "Ready";
        }
        
        QSslCertificate MainWindow::getCertificate(const QString filePath)
        {
            QFile certFile(filePath);
        
            QByteArray certArray;
            if (certFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
                while (!certFile.atEnd()) {
                    QByteArray line = certFile.readLine().trimmed();
                    certArray.append(line);
                }
            }
        
            return QSslCertificate(certArray);
        
        }
        

        And the is the output:

        openSSL Version: "OpenSSL 1.1.1c  28 May 2019"
        Number of Certificates 1
        isNull: true
        isSelfSigned: false
        Socket Error: "Der Name des Hosts ist keiner aus der Liste der für dieses Zertifikat gültigen Hosts"
        

        I'm not quite sure how to setup the certificate which I got from the server.

        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