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. Postgresql force SSL connection

Postgresql force SSL connection

Scheduled Pinned Locked Moved General and Desktop
13 Posts 3 Posters 10.6k 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.
  • M Offline
    M Offline
    mbnoimi
    wrote on last edited by
    #3

    [quote author="ChrisW67" date="1373600409"]I assume you mean it could not connect to the database.[/quote]
    No, it can connect although I commented the 9th line!
    I want to prevent connection without SSL requirement.

    1 Reply Last reply
    0
    • C Offline
      C Offline
      ChrisW67
      wrote on last edited by
      #4

      So the problem is that the PostgreSQL server is accepting connections that are not secured by SSL. This is not a Qt problem.

      1 Reply Last reply
      0
      • M Offline
        M Offline
        mbnoimi
        wrote on last edited by
        #5

        but it will not connect in case I use:
        @db.setConnectOptions("sslmode=disable");@

        So I wonder Does Qt use SSL by default? means I don't need to use:
        @db.setConnectOptions("sslmode=require");@

        1 Reply Last reply
        0
        • C Offline
          C Offline
          ChrisW67
          wrote on last edited by
          #6

          Qt generally will not use SSL on any TCP/IP connection unless told to (and requires OpenSSL libraries installed). What the PostgreSQL client does by default is a matter for PostgreSQL, but I'd be very surprise dif it defaulted to SSL.

          What does QSqlDatabase::lastError() tell you?
          What does your PostgreSQL log tell you?

          We cannot diagnose a problem we cannot see.

          1 Reply Last reply
          0
          • M Offline
            M Offline
            mbnoimi
            wrote on last edited by
            #7

            Maybe I wasn't clear, Qt by default connects to SSL is this right behavior?
            @# pg_hba.conf
            local all postgres peer
            local all all peer
            host all all 127.0.0.1/32 md5
            hostnossl all all 0.0.0.0/0 reject
            hostssl all all 0.0.0.0/0 md5@

            [code]#include <QCoreApplication>
            #include <QtSql>
            #include <QDebug>

            int main(int argc, char *argv[])
            {
            QCoreApplication a(argc, argv);

            QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
            db.setHostName("192.168.0.74");
            db.setPort(5433);
            // sslmode=disable to use TCP/IP
            // db.setConnectOptions("sslmode=disable");
            db.setDatabaseName("testDB");
            db.setUserName("postgres");
            db.setPassword("***");
            if (!db.open())
                qDebug() << db.lastError().text();
            else
                qDebug() << "connected.";
            
            return a.exec&#40;&#41;;
            

            }
            [/code]

            The output:
            [code]connected.[/code]

            but when I unmment line 13 the output becomes:
            [code]"FATAL: pg_hba.conf rejects connection for host "192.168.0.202", user "postgres", database "testDB", SSL off
            QPSQL: Unable to connect"[/code]

            1 Reply Last reply
            0
            • C Offline
              C Offline
              ChrisW67
              wrote on last edited by
              #8

              I have the 64-bit Linux binary distribution of Qt 5.1.
              I have your code with no setConnectOptions() calls.

              I have just installed PostgreSQL 9.2.4, changed nothing on the server except allowing all connections from my LAN:
              @
              local all all trust
              host all all 127.0.0.1/32 trust
              host all all ::1/128 trust
              host all all 192.168.1.0/24 md5
              @
              then watched the connection from the client to server using Wireshark. The PostgreSQL client attempts to use SSL and, because the server is not accepting it, reverts to in-the-clear.

              With the server configured for SSL with a self-signed certificate:
              @

              postgresql.conf

              ssl = on
              ssl_cert_file = '/etc/postgresql-9.2/server.crt"
              ssl_key_file = '/etc/postgresql-9.2/server.key'
              @
              the client was successful in connecting with the entire transaction encrypted.

              When I change pg_hba.conf to
              @
              hostnossl all all 192.168.1.0/24 reject
              hostssl all all 192.168.1.0/24 md5
              @
              The client continues to connect with SSL. If I specify:
              @
              db.setConnectOptions("sslmode=disable");
              @
              the client fails to connect at all.

              Does that answer your question?

              1 Reply Last reply
              0
              • M Offline
                M Offline
                mbnoimi
                wrote on last edited by
                #9

                [quote]With the server configured for SSL with a self-signed certificate:

                # postgresql.conf
                ssl = on
                ssl_cert_file = '/etc/postgresql-9.2/server.crt"
                ssl_key_file = '/etc/postgresql-9.2/server.key'
                

                [/quote]
                I've Postgresql issue with new SSL configurations because I've PG9.1 while your snippet uses PG9.2!

                1 Reply Last reply
                0
                • M Offline
                  M Offline
                  mbnoimi
                  wrote on last edited by
                  #10

                  @ssl_cert_file, ssl_key_file@
                  They aew new features in Postgresql 9.2

                  1 Reply Last reply
                  0
                  • M Offline
                    M Offline
                    mbnoimi
                    wrote on last edited by
                    #11

                    I upgraded my Postgresql to 9.2 and still get same behavior from Qt side it can connect to the server even if I don't add:
                    @db.setConnectOptions("sslmode=require");@

                    I want to be sure that my connection is safe by SSL so I tried to use Wireshark with these filters but I'm not from the result:
                    [code]ip.dst == 192.168.0.74 && tcp.port==5433[/code]

                    How can I be sure that Qt connects safely by SSL?

                    1 Reply Last reply
                    0
                    • M Offline
                      M Offline
                      mbnoimi
                      wrote on last edited by
                      #12

                      May you please help me to fix this issue guys?

                      1 Reply Last reply
                      0
                      • V Offline
                        V Offline
                        vaychick
                        wrote on last edited by
                        #13

                        [quote]//db.setConnectOptions("sslmode=require");

                        But it could connect the database?!!![/quote]

                        http://www.postgresql.org/docs/9.1/static/libpq-connect.html:

                        sslmode

                        This option determines whether or with what priority a secure SSL TCP/IP connection will be negotiated with the server. There are six modes:
                        

                        disable - only try a non-SSL connection

                        allow - first try a non-SSL connection; if that fails, try an SSL connection

                        prefer (default) - first try an SSL connection; if that fails, try a non-SSL connection

                        require - only try an SSL connection. If a root CA file is present, verify the certificate in the same way as if verify-ca was specified

                        verify-ca - only try an SSL connection, and verify that the server certificate is issued by a trusted certificate authority (CA)

                        verify-full - only try an SSL connection, verify that the server certificate is issued by a trusted CA and that the server host name matches that in the certificate

                        Driver uses "prefer" mode by default.

                        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