15

I have a Postgres server with a user dev which requires a client certificate to log in. I'm using the command psql "sslmode=require user=dev host=db.prod", which gives me psql: FATAL: connection requires a valid client certificate.

I know where the certificate is on my server. My question is, how do I specify the client certificate location to psql?

Jorn
  • 441
  • 1
  • 4
  • 13

2 Answers2

18

The end result looks like $>psql "port=5431 host=localhost user=postgres sslcert=./test/client.crt sslkey=./test/client.key sslrootcert=./test/server.crt sslmode=verify-ca"

All the variables are here.

chicks
  • 3,639
  • 10
  • 26
  • 36
Olivier D
  • 281
  • 2
  • 3
  • 2
    if I place root crt in ~/.postgreqsl/ I don't have to provide any key. If I place it somewhere else and provide sslrootcert, suddenly I have to also provide key - do you know how does that work? – Radu Simionescu Sep 11 '18 at 16:58
10

As stated in the documentation linked by @Milen, you can do this by setting the PGSSLCERT and PGSSLKEY environment variables, or by adding sslcert=<cert location> sslkey=<key location> to the connection string.

Jorn
  • 441
  • 1
  • 4
  • 13