Following the indications found here:
https://joelonsql.com/2013/04/27/securing-postgresql-using-hostssl-cert-clientcert1/
I created and modified these files:
CA:

root@pc:/home/marco# ls -lah /etc/ssl/private/fabric_ca.key
-rw-r----- 1 root ssl-cert 1.8K Sep 30 14:50 /etc/ssl/private/fabric_ca.key

(base) marco@pc:~$ ls -lah /usr/local/share/ca-certificates/fabric_ca.crt
-rw-r--r-- 1 root root 1.3K Sep 30 15:43
/usr/local/share/ca-certificates/fabric_ca.crt

(base) marco@pc:~$ ls -lah /etc/ssl/certs/fabric_ca.pem
lrwxrwxrwx 1 root root 46 Sep 30 15:45 /etc/ssl/certs/fabric_ca.pem ->
/usr/local/share/ca-certificates/fabric_ca.crt
(base) marco@pc:~$

PostgreSQL-Server:

(base) postgres@pc:~$ ls -lah /var/lib/postgresql/11/fabmnet/server.key
-r-------- 1 postgres postgres 1.7K Sep 30 16:05
/var/lib/postgresql/11/fabmnet/server.key

(base) postgres@pc:~$ ls -lah /var/lib/postgresql/11/fabmnet/server.crt
-rw-r--r-- 1 postgres postgres 1.2K Sep 30 16:34
/var/lib/postgresql/11/fabmnet/server.crt

(base) postgres@pc:~$ ls -lah /var/lib/postgresql/11/fabmnet/root.crt
-rw------- 1 postgres postgres 1.4K Sep 30 13:39
/var/lib/postgresql/11/fabmnet/root.crt

(base) marco@pc:~$ ls -ltr /usr/local/share/ca-certificates/fabric_ca.crt
-rw-r--r-- 1 root root 1302 Sep 30 15:43
/usr/local/share/ca-certificates/fabric_ca.crt

(base) marco@pc:~$ ls -ltr
/usr/local/share/ca-certificates/fabric_ca_postgresql.crt
-rw------- 1 root root 1354 Sep 30 17:12
/usr/local/share/ca-certificates/fabric_ca_postgresql.crt

(base) marco@pc:~$ ls -ltr /etc/ssl/certs/fabric_ca.pem
lrwxrwxrwx 1 root root 46 Sep 30 15:45 /etc/ssl/certs/fabric_ca.pem ->
/usr/local/share/ca-certificates/fabric_ca.crt

(base) marco@pc:~$ ls -ltr /etc/ssl/certs/fabric_ca_postgresql.pem
lrwxrwxrwx 1 root root 57 Sep 30 17:12
/etc/ssl/certs/fabric_ca_postgresql.pem ->
/usr/local/share/ca-certificates/fabric_ca_postgresql.crt


I set /etc/postgresql/11/fabmnet/pg_hba.conf  in this way:


# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5

# Allow connections from localhost only to fabmnet_ca for postgres user
clientcert
hostssl fabmnet_ca      +ssl_fabric_ca_certusers        192.168.1.0/24
 cert    clientcert=1

# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5

PostgreSQL-client  :

(base) marco@pc:~$ ls -ltr ~/.postgresql/root.crt
-rw------- 1 postgres postgres 1354 Sep 30 17:22
/home/marco/.postgresql/root.crt

(base) marco@pc:~$ ls -ltr ~/.postgresql/postgresql.key
-r-------- 1 postgres postgres 887 Sep 30 17:23
/home/marco/.postgresql/postgresql.key

(base) marco@pc:~$ ls -ltr ~/.postgresql/postgresql.crt
-rw-r--r-- 1 postgres postgres 1001 Sep 30 17:25
/home/marco/.postgresql/postgresql.crt

If I put in fabric-ca-server-config.yaml:

db:
  type: postgres
  datasource: host=localhost port=5433 user=postgres password=1234
dbname=fabmnet_ca sslmode=require
  tls:
      enabled: true
      certfiles:
      client:
        certfile: /var/lib/postgresql/11/fabmnet/server.crt
        keyfile: /var/lib/postgresql/11/fabmnet/server.key



(base) marco@pc:~/fabric/fabric-ca$ fabric-ca-server init -b admin:adminpw
2019/09/30 17:54:02 [INFO] Configuration file location:
/home/marco/fabric/fabric-ca/fabric-ca-server-config.yaml
2019/09/30 17:54:02 [INFO] Server Version: 1.4.4
2019/09/30 17:54:02 [INFO] Server Levels: &{Identity:2 Affiliation:1
Certificate:1 Credential:1 RAInfo:1 Nonce:1}
2019/09/30 17:54:02 [INFO] The CA key and certificate already exist
2019/09/30 17:54:02 [INFO] The key is stored by BCCSP provider 'SW'
2019/09/30 17:54:02 [INFO] The certificate is at:
/home/marco/fabric/fabric-ca/ca-cert.pem
2019/09/30 17:54:02 [ERROR] Error occurred initializing database: No
trusted root certificates for TLS were provided
2019/09/30 17:54:02 [INFO] Home directory for default CA:
/home/marco/fabric/fabric-ca
2019/09/30 17:54:02 [INFO] Initialization was successful

If I put in fabric-ca-server-config.yaml:

db:
  type: postgres
  datasource: host=localhost port=5433 user=postgres password=1234
dbname=fabmnet_ca sslmode=require
  tls:
      enabled: false
      certfiles:
      client:
        certfile:
        keyfile:

(base) marco@pc:~/fabric/fabric-ca$ fabric-ca-server init -b admin:adminpw
2019/09/30 17:56:22 [INFO] Configuration file location:
/home/marco/fabric/fabric-ca/fabric-ca-server-config.yaml
2019/09/30 17:56:22 [INFO] Server Version: 1.4.4
2019/09/30 17:56:22 [INFO] Server Levels: &{Identity:2 Affiliation:1
Certificate:1 Credential:1 RAInfo:1 Nonce:1}
2019/09/30 17:56:22 [INFO] The CA key and certificate already exist
2019/09/30 17:56:22 [INFO] The key is stored by BCCSP provider 'SW'
2019/09/30 17:56:22 [INFO] The certificate is at:
/home/marco/fabric/fabric-ca/ca-cert.pem
2019/09/30 17:56:22 [WARNING] Failed to connect to database 'fabmnet_ca'
2019/09/30 17:56:22 [WARNING] Failed to connect to database 'postgres'
2019/09/30 17:56:22 [WARNING] Failed to connect to database 'template1'
2019/09/30 17:56:22 [ERROR] Error occurred initializing database: Failed to
connect to Postgres database. Postgres requires connecting to a specific
database, the following databases were tried: [fabmnet_ca postgres
template1]. Please create one of these database before continuing
2019/09/30 17:56:22 [INFO] Home directory for default CA:
/home/marco/fabric/fabric-ca
2019/09/30 17:56:22 [INFO] Initialization was successful

/var/log/postgresql/postgresql-11-fabmnet.log  :

2019-09-30 17:56:22.760 CEST [10651] [unknown]@[unknown] LOG:  incomplete
startup packet
2019-09-30 17:56:22.760 CEST [10650] [unknown]@[unknown] LOG:  incomplete
startup packet
2019-09-30 17:56:22.760 CEST [10649] [unknown]@[unknown] LOG:  incomplete
startup packet

What could it mean?

Marco

Il giorno sab 28 set 2019 alle ore 23:49 Adrian Klaver <
adrian.kla...@aklaver.com> ha scritto:

> On 9/28/19 12:07 AM, Marco Ippolito wrote:
> > Hi Adrian,
> >
> > Il giorno ven 27 set 2019 alle ore 21:39 Adrian Klaver
> > <adrian.kla...@aklaver.com <mailto:adrian.kla...@aklaver.com>> ha
> scritto:
> >
> >     On 9/27/19 11:02 AM, Marco Ippolito wrote:
> >      > Thank you very much Adrian.
> >      > Two things:
> >      >
> >      > 1)
> >      >   Why if I just specify through port the cluster and the host
> >     connection
> >      > I connect correctly with SSL,
> >      >   but if I specify also the database and the user it connects it
> >     doesn't
> >      > usel SSL connection, or at least it doesn't say it uses SSL? :
> >
> >
> >     Can you show the contents of  pg_hba.conf file for the 11/fabmnet
> >     cluster. The file will be in:
> >
> >     /etc/postgresql/11/fabmnet/
> >
> >
> >
> >
> > /etc/postgresql/11/fabmnet/pg_hba.conf  :
> >
> > # Database administrative login by Unix domain socket
> > local   all             postgres                                peer
> >
> > # TYPE  DATABASE        USER            ADDRESS                 METHOD
> >
> > # "local" is for Unix domain socket connections only
> > local   all             all                                     peer
> > # IPv4 local connections:
> > host    all             all 127.0.0.1/32 <http://127.0.0.1/32>
>
> >   md5
> >
> > # Allow connections from localhost only to fabmnet_ca for postgres user
> > hostssl fabmnet_ca      postgres        localhost               cert
> >
> > # IPv6 local connections:
> > host    all             all             ::1/128                 md5
> > # Allow replication connections from localhost, by a user with the
> > # replication privilege.
> > local   replication     all                                     peer
> > host    replication     all 127.0.0.1/32 <http://127.0.0.1/32>
>
> >   md5
> > host    replication     all             ::1/128                 md5
> >
>
> > fabric-ca-server-config.yaml : sslmode=require
> > db:
> >    type: postgres
> >    datasource: host=localhost port=5433 user=postgres password=1234
> > dbname=fabmnet_ca sslmode=require
> >    tls:
> >        enabled: false
> >        certfiles:
> >        client:
> >          certfile:
> >          keyfile:
>
> You are not including the certs or setting tls.enabled: true. Not sure
> that is the root cause at the moment.
>
> I would try just going through psql for the time being to take the
> fabric server out of the loop. Something like:
>
> psql "host=localhost port=5433 dbname=fabmnet_ca user=postgres
> sslmode=require"
>
>  From below I am guessing you do not have the SSL certs setup properly
> for the fabmnet Postgres instance(the one on port 5433) and/or on the
> client. Take a look at:
>
> https://www.postgresql.org/docs/11/libpq-ssl.html
>
> >
> >
> > (base) marco@pc:~/fabric/fabric-ca$ fabric-ca-server init -b
> admin:adminpw
> > 2019/09/28 09:00:08 [INFO] Configuration file location:
> > /home/marco/fabric/fabric-ca/fabric-ca-server-config.yaml
> > 2019/09/28 09:00:08 [INFO] Server Version: 1.4.4
> > 2019/09/28 09:00:08 [INFO] Server Levels: &{Identity:2 Affiliation:1
> > Certificate:1 Credential:1 RAInfo:1 Nonce:1}
> > 2019/09/28 09:00:08 [INFO] The CA key and certificate already exist
> > 2019/09/28 09:00:08 [INFO] The key is stored by BCCSP provider 'SW'
> > 2019/09/28 09:00:08 [INFO] The certificate is at:
> > /home/marco/fabric/fabric-ca/ca-cert.pem
> > 2019/09/28 09:00:08 [WARNING] Failed to connect to database 'fabmnet_ca'
> > 2019/09/28 09:00:08 [ERROR] Error occurred initializing database: Failed
> > to create Postgres tables: Error creating users table: pq: client
> > certificates can only be checked if a root certificate store is available
> > 2019/09/28 09:00:08 [INFO] Home directory for default CA:
> > /home/marco/fabric/fabric-ca
> > 2019/09/28 09:00:08 [INFO] Initialization was successful
> >
> >
> > /var/log/postgresql/postgresql-11-fabmnet.log  :
> >
> > 2019-09-28 09:00:08.634 CEST [4226] postgres@fabmnet_ca FATAL:  client
> > certificates can only be checked if a root certificate store is available
> > 2019-09-28 09:00:08.641 CEST [4227] postgres@postgres ERROR:  database
> > "fabmnet_ca" already exists
> > 2019-09-28 09:00:08.641 CEST [4227] postgres@postgres STATEMENT:
>  CREATE
> > DATABASE fabmnet_ca
> > 2019-09-28 09:00:08.644 CEST [4228] postgres@fabmnet_ca FATAL:  client
> > certificates can only be checked if a root certificate store is available
> > 2019-09-28 09:00:08.650 CEST [4227] postgres@postgres LOG:  could not
> > receive data from client: Connection reset by peer
> >
>
>
> --
> Adrian Klaver
> adrian.kla...@aklaver.com
>

Reply via email to