Re: [HACKERS] GnuTLS support - Mailing list pgsql-hackers
From | Robert Haas |
---|---|
Subject | Re: [HACKERS] GnuTLS support |
Date | |
Msg-id | CA+TgmoaxbXNqvptVFFTuXJK+u+-qjfzYPuHqpTpxsHQxntk5yQ@mail.gmail.com Whole thread Raw |
In response to | [HACKERS] GnuTLS support (Andreas Karlsson <andreas@proxel.se>) |
Responses |
Re: [HACKERS] GnuTLS support
Re: [HACKERS] GnuTLS support |
List | pgsql-hackers |
On Thu, Aug 31, 2017 at 1:52 PM, Andreas Karlsson <andreas@proxel.se> wrote: > I have seen discussions from time to time about OpenSSL and its licensing > issues so I decided to see how much work it would be to add support for > another TLS library, and I went with GnuTLS since it is the library I know > best after OpenSSL and it is also a reasonably popular library. Thanks for working on this. I think it's good for PostgreSQL to have more options in this area. > = Design questions > > == GnuTLS priority strings vs OpenSSL cipher lists > > GnuTLS uses a different format for specifying ciphers. Instead of setting > ciphers, protocol versions, and ECDH curves separately GnuTLS instead uses a > single priority string[1]. > > For example the default settings of PostgreSQL (which include disabling > SSLv3) > > ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' # allowed SSL ciphers > ssl_prefer_server_ciphers = on > ssl_ecdh_curve = 'prime256v1' > > is represented with a string similar to > > SECURE128:+3DES-CBC:+GROUP-SECP256R1:%SERVER_PRECEDENCE > > So the two libraries have decided on different ways to specify things. I think that what this shows is that the current set of GUCs is overly OpenSSL-centric. We created a set of GUCs that are actually specific to one particular implementation but named them as if they were generic. My idea about this would be to actually rename the existing GUCs to start with "openssl" rather than "ssl", and then add new GUCs as needed for other SSL implementations. Depending on what we think is best, GUCs for an SSL implementation other than the one against which we compiled can either not exist at all, or can exist but be limited to a single value (e.g. "none", as we currently do when the compile has no SSL support at all). Also, we could add a read-only GUC with a name like ssl_library that exposes the name of the underlying SSL implementation - none, openssl, gnutls, or whatever. I think if we go the route of insisting that every SSL implementation has to use the existing GUCs, we're just trying to shove a square peg into a round hole, and there's no real benefit for users. If the string that has to be stuffed into ssl_ciphers differs based on which library was chosen at compile time, then you can't have a uniform default configuration for all libraries anyway. I think it'll be easier to explain and document this if there's separate documentation for openssl_ciphers, gnutls_ciphers, etc. rather than one giant documentation section that tries to explain every implementation separately. > There are currently two failing SSL tests which at least to me seems more > like they test specific OpenSSL behaviors rather than something which need > to be true for all SSL libraries. > > The two tests: > > # Try with just the server CA's cert. This fails because the root file > # must contain the whole chain up to the root CA. > note "connect with server CA cert, without root CA"; > test_connect_fails("sslrootcert=ssl/server_ca.crt sslmode=verify-ca"); > > # A CRL belonging to a different CA is not accepted, fails > test_connect_fails( > "sslrootcert=ssl/root+server_ca.crt sslmode=verify-ca > sslcrl=ssl/client.crl"); > > For the missing root CA case GnuTLS seems to be happy enough with just an > intermediate CA and as far as I can tell this behavior is not easy to > configure. > > And for the CRL belonging to a different CA case GnuTLS can be configured to > either just store such a non-validating CRL or to ignore it, but not to > return an error. > > Personally I think thee two tests should just be removed but maybe I am > missing something. I don't know what we should do about these issues. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
pgsql-hackers by date: