Re: SSL between Primary and Seconday PostgreSQL DBs

From: Peter Eisentraut <peter(dot)eisentraut(at)2ndquadrant(dot)com>
To: Susan Joseph <sandajoseph(at)verizon(dot)net>, "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org>
Subject: Re: SSL between Primary and Seconday PostgreSQL DBs
Date: 2020-09-03 05:01:17
Message-ID: ff9de262-5449-9691-199e-13e436700048@2ndquadrant.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On 2020-08-27 12:57, Susan Joseph wrote:
> So has no one done this before?

I'm sure people have done this. But I suggest that if you ask a
question on this mailing list, you ask something more concrete, like, I
tried to do this, and got stuck here, and tried this and got this error.
People can help with that sort of thing. What we have here is a
complex security setup and you are asking people to do an open-ended
review. No one wants to do that.

> -----Original Message-----
> From: Susan Joseph <sandajoseph(at)verizon(dot)net>
> To: pgsql-general(at)postgresql(dot)org <pgsql-general(at)postgresql(dot)org>
> Sent: Mon, Aug 24, 2020 10:10 am
> Subject: SSL between Primary and Seconday PostgreSQL DBs
>
> I have setup a Primary and Secondary PostgreSQL DBs.  They were setup up
> with basic replication then I went back and modified them to use SSL.  I
> am just not sure if I did it correctly.  Everything is working but I
> want to make sure I have the settings correctly.  I am using PostgreSQL
> 11.2.
>
> * I have a PKI that I stood up so I issued 2 server certificates one
> for each database from my CA.
> * Primary server certificate - Primary Database
> o The FQDN and IP address are set in the SAN field.
> o FQDN is also the CN in the DN
> o Key Usage is set to Digital Signature and Key encipherment
> o EKU is set to Server Authentication and Client Authentication
> * Rep_user certificate - Secondary Database
> o CN is set to the rep_user account name
> o Key Usage is set to digital signature and key encipherment
> o EKU is set to client authentication
> * Each certificate file contains the certificate and the subCA
> certificate who issued the certificate and put in a file called
> server.crt for the Primary and client.crt for the secondary.
> * The key for each certificate is stored in a separate file
> unencrypted (I have questions about this later on) in a file called
> server.key and client.key
> * The server.crt, server.key, and root.crt are put onto the primary
> database server in the /data/pgsql/data location, the owner and
> group of these files is set to postgres
> * The client.crt, client.key, and root.crt are put onto the primary
> database server in the /data/pgsql/data location, the owner and
> group of these files is set to postgres
> * On the Primary in postgresql.conf I set:
> o ssl=on
> o ssl_ca_file='root.crt'
> o ssl_cert_file='server.crt'
> o ssl_key_file='server.key'
> o ssl_ciphers='HIGH:MEDIUM:+3DES:!aNULL'
> * On the Primary in pg_hba.conf I add a replication line:
> o hostssl                        replication
> rep_user                  cert
> * On the Secondary I set the following information in the
> postgresql.conf to:  (DO I NEED TO DO THIS??)
> o ssl=on
> o ssl_ca_file='root.crt'
> o ssl_cert_file='client.crt'
> o ssl_cert_fkey='client.key'
> o ssl_ciphers='HIGH:MEDIUM:+3DES:!aNULL'
> * On the Secondary I edit the recovery.conf file to the following:
> o primary_conninfo = 'user=rep_user passfile=''/data/.pgpass''
> host=<Primary DB IP> port=5432 sslmode=verify-ca
> sslcert=client.crt sslkey=client.key sslcompression=0
> target_session_attrs=any'
> * On the Secondary I edit the pg_hba.conf file and change the rep_user
> line to:
> o hostssl          replication         rep_user           <primary
> IP>/32      cert clientcert=1
> * On the Secondary I move the root.crt to /data/pgsql/data/.postgresql
> * Then I restart the databases
>
>
> My questions are:
>
> * Do I need to set the information in the Secondary postgresql.conf?
> Originally I did not set this and everything worked but I saw errors
> in my log files that said to do SSL these needed to be set so I went
> back and set them.  Are there pgsql commands I can run to test that
> my SSL is working in both directions?
> * Are my pg_hba.conf files set correctly?  Is that how you get SSL
> "turned on" for communications between the primary and the rep_user
> account?
> * If I leave my key file encrypted then every time my databases have
> to be started have to enter the password.  So you can either leave
> the passwords unencrypted and set the permissions on the file to
> 0600 accessible only by postgres or you can enter the key password
> each time the database is started up.  As someone in the security
> field I have a tough time leaving the key unencrypted but as some
> setting up a production system that is located on a network that you
> can't get to without directly accessing the server I feel that is
> enough security that I can leave them unencrypted.  Thoughts?
> * Am I missing anything?  There are no videos out there that show how
> to stand up a 2 way SSL communication channel between the primary
> and secondary, or does anyone have one that they can share?
>
>
> Thanks,
>   Susan
>
>
>

--
Peter Eisentraut http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Dirk Lattermann 2020-09-03 06:20:27 Re: Trigger transaction isolation
Previous Message Tom Lane 2020-09-02 19:35:41 Re: Reconstructing transaction content after the fact