Sorry again, I was cheering up too quickly. With this configuration in fabric-ca-server-config.yaml : db: type: postgres datasource: host=localhost port=5433 user=postgres password=1234 dbname=fabmnet_ca sslmode=disable tls: enabled: false certfiles: client: certfile: keyfile:
the output of starting fabric-ca-server at first glance seems ok: (base) marco@pc:~/fabric/fabric-ca$ fabric-ca-server start -b admin:adminpw 2019/09/27 20:11:43 [INFO] Configuration file location: /home/marco/fabric/fabric-ca/fabric-ca-server-config.yaml 2019/09/27 20:11:44 [INFO] Starting server in home directory: /home/marco/fabric/fabric-ca 2019/09/27 20:11:44 [INFO] Server Version: 1.4.4 2019/09/27 20:11:44 [INFO] Server Levels: &{Identity:2 Affiliation:1 Certificate:1 Credential:1 RAInfo:1 Nonce:1} 2019/09/27 20:11:44 [INFO] The CA key and certificate already exist 2019/09/27 20:11:44 [INFO] The key is stored by BCCSP provider 'SW' 2019/09/27 20:11:44 [INFO] The certificate is at: /home/marco/fabric/fabric-ca/ca-cert.pem 2019/09/27 20:11:44 [INFO] Initialized postgres database at host=localhost port=5433 user=**** password=**** dbname=fabmnet_ca sslmode=disable 2019/09/27 20:11:44 [INFO] The Idemix issuer public and secret key files already exist 2019/09/27 20:11:44 [INFO] secret key file location: /home/marco/fabric/fabric-ca/msp/keystore/IssuerSecretKey 2019/09/27 20:11:44 [INFO] public key file location: /home/marco/fabric/fabric-ca/IssuerPublicKey 2019/09/27 20:11:44 [INFO] The Idemix issuer revocation public and secret key files already exist 2019/09/27 20:11:44 [INFO] private key file location: /home/marco/fabric/fabric-ca/msp/keystore/IssuerRevocationPrivateKey 2019/09/27 20:11:44 [INFO] public key file location: /home/marco/fabric/fabric-ca/IssuerRevocationPublicKey 2019/09/27 20:11:44 [INFO] Home directory for default CA: /home/marco/fabric/fabric-ca 2019/09/27 20:11:44 [INFO] Operation Server Listening on 127.0.0.1:9443 2019/09/27 20:11:44 [INFO] Listening on http://0.0.0.0:7054 but the /var/log/postgresql/postgresql-11-fabmnet.log gives us a different, not so bright, perspective: 2019-09-27 20:11:44.012 CEST [3450] postgres@fabmnet_ca ERROR: database "fabmnet_ca" already exists 2019-09-27 20:11:44.012 CEST [3450] postgres@fabmnet_ca STATEMENT: CREATE DATABASE fabmnet_ca 2019-09-27 20:11:44.015 CEST [3451] postgres@fabmnet_ca ERROR: duplicate key value violates unique constraint "properties_pkey" 2019-09-27 20:11:44.015 CEST [3451] postgres@fabmnet_ca DETAIL: Key (property)=(identity.level) already exists. 2019-09-27 20:11:44.015 CEST [3451] postgres@fabmnet_ca STATEMENT: INSERT INTO properties (property, value) VALUES ('identity.level', '0'), ('affiliation.level', '0'), ('certificate.level', '0'), ('cred$ 2019-09-27 20:11:44.017 CEST [3451] postgres@fabmnet_ca ERROR: duplicate key value violates unique constraint "affiliations_name_key" 2019-09-27 20:11:44.017 CEST [3451] postgres@fabmnet_ca DETAIL: Key (name)=(org2) already exists. 2019-09-27 20:11:44.017 CEST [3451] postgres@fabmnet_ca STATEMENT: INSERT INTO affiliations (name, prekey, level) VALUES ($1, $2, $3) 2019-09-27 20:11:44.017 CEST [3451] postgres@fabmnet_ca ERROR: duplicate key value violates unique constraint "affiliations_name_key" 2019-09-27 20:11:44.017 CEST [3451] postgres@fabmnet_ca DETAIL: Key (name)=(org2.department1) already exists. 2019-09-27 20:11:44.017 CEST [3451] postgres@fabmnet_ca STATEMENT: INSERT INTO affiliations (name, prekey, level) VALUES ($1, $2, $3) 2019-09-27 20:11:44.017 CEST [3451] postgres@fabmnet_ca ERROR: duplicate key value violates unique constraint "affiliations_name_key" 2019-09-27 20:11:44.017 CEST [3451] postgres@fabmnet_ca DETAIL: Key (name)=(org1) already exists. 2019-09-27 20:11:44.017 CEST [3451] postgres@fabmnet_ca STATEMENT: INSERT INTO affiliations (name, prekey, level) VALUES ($1, $2, $3) 2019-09-27 20:11:44.017 CEST [3451] postgres@fabmnet_ca ERROR: duplicate key value violates unique constraint "affiliations_name_key" 2019-09-27 20:11:44.017 CEST [3451] postgres@fabmnet_ca DETAIL: Key (name)=(org1.department1) already exists. 2019-09-27 20:11:44.017 CEST [3451] postgres@fabmnet_ca STATEMENT: INSERT INTO affiliations (name, prekey, level) VALUES ($1, $2, $3) What do these continuous attempts to duplicate key value mean? It doesn't look so good this fabric-ca-server connection with postgresql-11 's db ... Marco Il giorno ven 27 set 2019 alle ore 20:02 Marco Ippolito < ippolito.ma...@gmail.com> ha scritto: > 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? : > > (base) postgres@pc:~$ psql -p5433 -h localhost > Password for user postgres: > psql (11.5 (Ubuntu 11.5-1.pgdg18.04+1)) > SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: > 256, compression: off) > Type "help" for help. > > postgres=# \conninfo > You are connected to database "postgres" as user "postgres" on host > "localhost" at port "5433". > SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: > 256, compression: off) > > > (base) postgres@pc:~$ psql -p5433 -h localhost -d fabmnet_ca -U postgres > Password for user postgres: > psql (11.5 (Ubuntu 11.5-1.pgdg18.04+1)) > Type "help" for help. > > fabmnet_ca=# \conninfo > You are connected to database "fabmnet_ca" as user "postgres" on host > "localhost" at port "5433". > fabmnet_ca=# > > 2) > In fabric-ca-server-config.yaml > > a) if I set: > > db: > type: postgres > datasource: host=localhost port=5433 user=postgres password=1234 > dbname=fabmnet_ca sslmode=allow > tls: > enabled: false > certfiles: > client: > certfile: > keyfile: > > where sslmode=allow means "first try a non-SSL connection; if that > fails, try an SSL connection" > > (base) marco@pc:~/fabric/fabric-ca$ fabric-ca-server init -b > admin:adminpw > 2019/09/27 19:37:46 [INFO] Configuration file location: > /home/marco/fabric/fabric-ca/fabric-ca-server-config.yaml > 2019/09/27 19:37:46 [INFO] Server Version: 1.4.4 > 2019/09/27 19:37:46 [INFO] Server Levels: &{Identity:2 Affiliation:1 > Certificate:1 Credential:1 RAInfo:1 Nonce:1} > 2019/09/27 19:37:46 [INFO] The CA key and certificate already exist > 2019/09/27 19:37:46 [INFO] The key is stored by BCCSP provider 'SW' > 2019/09/27 19:37:46 [INFO] The certificate is at: > /home/marco/fabric/fabric-ca/ca-cert.pem > 2019/09/27 19:37:46 [WARNING] Failed to connect to database > 'fabmnet_ca' > 2019/09/27 19:37:46 [WARNING] Failed to connect to database 'postgres' > 2019/09/27 19:37:46 [WARNING] Failed to connect to database 'template1' > 2019/09/27 19:37:46 [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/27 19:37:46 [INFO] Home directory for default CA: > /home/marco/fabric/fabric-ca > 2019/09/27 19:37:46 [INFO] Initialization was successful > > /var/log/postgresql/postgresql-11-fabmnet.log : > 2019-09-27 19:43:14.194 CEST [3213] postgres@fabmnet_ca FATAL: > client certificates can only be checked if a root certificate store is > available > > b) if I set: > db: > type: postgres > datasource: host=localhost port=5433 user=postgres password=1234 > dbname=fabmnet_ca sslmode=disable > tls: > enabled: false > certfiles: > client: > certfile: > keyfile: > > > (base) marco@pc:~/fabric/fabric-ca$ fabric-ca-server init -b > admin:adminpw > 2019/09/27 19:55:03 [INFO] Configuration file location: > /home/marco/fabric/fabric-ca/fabric-ca-server-config.yaml > 2019/09/27 19:55:03 [INFO] Server Version: 1.4.4 > 2019/09/27 19:55:03 [INFO] Server Levels: &{Identity:2 Affiliation:1 > Certificate:1 Credential:1 RAInfo:1 Nonce:1} > 2019/09/27 19:55:03 [INFO] The CA key and certificate already exist > 2019/09/27 19:55:03 [INFO] The key is stored by BCCSP provider 'SW' > 2019/09/27 19:55:03 [INFO] The certificate is at: > /home/marco/fabric/fabric-ca/ca-cert.pem > 2019/09/27 19:55:03 [INFO] Initialized postgres database at > host=localhost port=5433 user=**** password=**** dbname=fabmnet_ca > sslmode=disable > 2019/09/27 19:55:03 [INFO] The Idemix issuer public and secret key > files already exist > 2019/09/27 19:55:03 [INFO] secret key file location: > /home/marco/fabric/fabric-ca/msp/keystore/IssuerSecretKey > 2019/09/27 19:55:03 [INFO] public key file location: > /home/marco/fabric/fabric-ca/IssuerPublicKey > 2019/09/27 19:55:03 [INFO] The Idemix issuer revocation public and > secret key files already exist > 2019/09/27 19:55:03 [INFO] private key file location: > /home/marco/fabric/fabric-ca/msp/keystore/IssuerRevocationPrivateKey > 2019/09/27 19:55:03 [INFO] public key file location: > /home/marco/fabric/fabric-ca/IssuerRevocationPublicKey > 2019/09/27 19:55:03 [INFO] Home directory for default CA: > /home/marco/fabric/fabric-ca > 2019/09/27 19:55:03 [INFO] Initialization was successful > > /var/log/postgresql/postgresql-11-fabmnet.log : > 2019-09-27 19:55:03.691 CEST [3313] postgres@fabmnet_ca ERROR: > database "fabmnet_ca" already exists > 2019-09-27 19:55:03.691 CEST [3313] postgres@fabmnet_ca > STATEMENT: CREATE DATABASE fabmnet_ca > > (base) marco@pc:~/fabric/fabric-ca$ fabric-ca-server start -b > admin:adminpw > 2019/09/27 19:57:58 [INFO] Configuration file location: > /home/marco/fabric/fabric-ca/fabric-ca-server-config.yaml > 2019/09/27 19:57:58 [INFO] Starting server in home directory: > /home/marco/fabric/fabric-ca > 2019/09/27 19:57:58 [INFO] Server Version: 1.4.4 > 2019/09/27 19:57:58 [INFO] Server Levels: &{Identity:2 Affiliation:1 > Certificate:1 Credential:1 RAInfo:1 Nonce:1} > 2019/09/27 19:57:58 [INFO] The CA key and certificate already exist > 2019/09/27 19:57:58 [INFO] The key is stored by BCCSP provider 'SW' > 2019/09/27 19:57:58 [INFO] The certificate is at: > /home/marco/fabric/fabric-ca/ca-cert.pem > 2019/09/27 19:57:58 [INFO] Initialized postgres database at > host=localhost port=5433 user=**** password=**** dbname=fabmnet_ca > sslmode=disable > 2019/09/27 19:57:58 [INFO] The Idemix issuer public and secret key > files already exist > 2019/09/27 19:57:58 [INFO] secret key file location: > /home/marco/fabric/fabric-ca/msp/keystore/IssuerSecretKey > 2019/09/27 19:57:58 [INFO] public key file location: > /home/marco/fabric/fabric-ca/IssuerPublicKey > 2019/09/27 19:57:58 [INFO] The Idemix issuer revocation public and > secret key files already exist > 2019/09/27 19:57:58 [INFO] private key file location: > /home/marco/fabric/fabric-ca/msp/keystore/IssuerRevocationPrivateKey > 2019/09/27 19:57:58 [INFO] public key file location: > /home/marco/fabric/fabric-ca/IssuerRevocationPublicKey > 2019/09/27 19:57:58 [INFO] Home directory for default CA: > /home/marco/fabric/fabric-ca > 2019/09/27 19:57:58 [INFO] Operation Server Listening on > 127.0.0.1:9443 > 2019/09/27 19:57:58 [INFO] Listening on http://0.0.0.0:7054 > > Does it mean that in order to use postgresql-11 with fabric-ca I have to > use only socket connection? > And if this is the case, why? > > Marco > > Il giorno ven 27 set 2019 alle ore 18:37 Adrian Klaver < > adrian.kla...@aklaver.com> ha scritto: > >> On 9/27/19 8:20 AM, Marco Ippolito wrote: >> > Correction of my previous email : >> > >> > This is the correct ssl connection, not the one before via socket: >> >> A tip, when troubleshooting be as explicit as possible in your command >> line usage. So for below explicitly state the -d postgres -U postgres. >> This will save you issues with default values and environment values >> that you don't know about changing the command. This is not the issue >> here, just a heads up for future use. >> >> More below. >> >> > >> > (base) postgres@pc:~$ psql -p5433 -h localhost >> > Password for user postgres: >> > psql (11.5 (Ubuntu 11.5-1.pgdg18.04+1)) >> > SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, >> bits: >> > 256, compression: off) >> >> > fabmnet_ca=# >> > >> > Anyway, I'm still struggling in understanding how to configure the ssh >> > connection of fabric-ca-server to fabmnet_ca database: >> > >> > This is what I set in fabric-ca-server-config.yaml : >> > >> > #db: >> > # type: sqlite3 >> > # datasource: fabric-ca-server.db >> > # tls: >> > # enabled: false >> > # certfiles: >> > # client: >> > # certfile: >> > # keyfile: >> > >> > >> > db: >> > type: postgres >> > datasource: host=localhost port=5433 user=postgres password=pwd >> > dbname=fabmnet_ca sslmode=verify-full >> >> For now I would drop the sslmode or set it to require. >> If I am following correctly, if you are cert authentication with >> fabric-ca: >> >> >> https://hyperledger-fabric-ca.readthedocs.io/en/release-1.4/users-guide.html#postgresql >> >> Then you need to fill in the certfile(s) sections. I know you have >> tls.enabled: false. I think that the server is taking the datasource as >> priority and trying a verify-full without the necessary cert >> information. That is why I suggested backing off on the SSL requirements >> to see if you can make a connection. For what the sslmode options means >> go here: >> >> https://www.postgresql.org/docs/11/libpq-connect.html#LIBPQ-PARAMKEYWORDS >> >> and search in page for sslmode. >> >> Plan B would be to fill in the certfile(s) information. >> >> As to your question below as to why the psql connection works. You are >> not specifying an sslmode to the connection so it defaults to a sslmode >> of: >> >> prefer (default) >> >> first try an SSL connection; if that fails, try a non-SSL connection >> >> There is no cert authentication going on in that case, so you connect. >> The connection is done using SSL, it just does not verify the cert. >> >> >> >> > tls: >> > enabled: false >> > certfiles: >> > client: >> > certfile: >> > keyfile: >> > >> > Initializing the fabric-ca-server gives "Failed to connect to Postgres >> > database" and in postgresql-11-fabmnet.log : sslv3 alert bad certificate >> > >> > (base) marco@pc:~/fabric/fabric-ca$ fabric-ca-server init -b >> admin:adminpw >> > 2019/09/27 17:07:27 [INFO] Configuration file location: >> > /home/marco/fabric/fabric-ca/fabric-ca-server-config.yaml >> > 2019/09/27 17:07:27 [INFO] Server Version: 1.4.4 >> > 2019/09/27 17:07:27 [INFO] Server Levels: &{Identity:2 Affiliation:1 >> > Certificate:1 Credential:1 RAInfo:1 Nonce:1} >> > 2019/09/27 17:07:27 [INFO] The CA key and certificate already exist >> > 2019/09/27 17:07:27 [INFO] The key is stored by BCCSP provider 'SW' >> > 2019/09/27 17:07:27 [INFO] The certificate is at: >> > /home/marco/fabric/fabric-ca/ca-cert.pem >> > 2019/09/27 17:07:27 [WARNING] Failed to connect to database 'fabmnet_ca' >> > 2019/09/27 17:07:27 [WARNING] Failed to connect to database 'postgres' >> > 2019/09/27 17:07:27 [WARNING] Failed to connect to database 'template1' >> > 2019/09/27 17:07:27 [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/27 17:07:27 [INFO] Home directory for default CA: >> > /home/marco/fabric/fabric-ca >> > 2019/09/27 17:07:27 [INFO] Initialization was successful >> > >> > /var/log/postgresql/postgresql-11-fabmnet.log : 2019-09-27 17:07:27.159 >> > CEST [6626] [unknown]@[unknown] LOG: could not accept SSL connection: >> > sslv3 alert bad certificate >> > >> > Why it says "sslv3 alert bad certificate" if it's exactly the same >> > certificate used when connecting to the same database with ssl in >> > postgres environment as shown above? >> > >> > Marco >> >> -- >> Adrian Klaver >> adrian.kla...@aklaver.com >> >