PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 26/06/2020 13:37:39

albourg
Membre

SSL - besoin d'explications

Bonjour,
postgres 12.2, linux x64. J'ai généré un certificat self-signed moi-même via ce script:

DAYS=3650
DOMAIN=masociete.com
HOST=serveur
SSLCONF=/etc/pki/tls/openssl.cnf

echo generate csr + key pair root.csr root.key
openssl req -new -nodes -text -out root.csr -keyout root.key -subj "/CN=root.$DOMAIN"
chmod og-rwx root.key
echo sign using root.csr, root.key to generate root.crt
openssl x509 -req -in root.csr -text -days $DAYS -extfile $SSLCONF -extensions v3_ca -signkey root.key -out root.crt
echo Use same command to generate server csr+key pair server.csr server.key
openssl req -new -nodes -text -out server.csr -keyout server.key -subj "/CN=$HOST.$DOMAIN"
chmod og-rwx server.key
echo sign using CA root
openssl x509 -req -in server.csr -text -days $DAYS -CA root.crt -CAkey root.key -CAcreateserial -out server.crt
chmod og-rwx server.crt
openssl verify -CAfile root.crt server.crt

Au niveau pg_hba.conf

hostssl db            usr            192.168.0.1/16          md5

ensuite:

createuser --pwprompt usr

psql ->

create database db;
grant connect on database db to usr;
grant all privileges on database db to usr;

Si je copie root.crt sur mon poste, le spécifie à pgadmin (+ ssl require), je peux me connecter. Sans le certificat, ça ne fonctionne pas.
Or dans la doc , https://www.postgresql.org/docs/current … RTIFICATES, il est marqué

add the authentication option clientcert=verify-ca or clientcert=verify-full to the appropriate hostssl line(s) in pg_hba.conf

Quand je mets

hostssl db            usr            192.168.0.1/16         clientcert=verify-ca

dans le pg_hba.conf, le connection est refusée. Il indique même que le certificat est invalide.
Or,

openssl verify -CAfile root.crt server.crt

permet d'affirmer que le certificat est correct.

Quelqu'un peut m'expliquer pq le clientcert=verify-ca ne fonctionne pas, et éventuellement s'il est utile, comment le faire fonctionner?

Merci.

Dernière modification par albourg (26/06/2020 15:09:33)

Hors ligne

#2 28/06/2020 20:50:55

dverite
Membre

Re : SSL - besoin d'explications

La déclaration ci-dessous a un problème de syntaxe:

hostssl db            usr            192.168.0.1/16         clientcert=verify-ca

Le modèle de syntaxe est

# hostssl       DATABASE  USER  ADDRESS  METHOD  [OPTIONS]

et clientcert=verify-ca est une option, pas une méthode d'authentification.
Il faut donc ajouter un choix d'authentification dans la colonne METHOD.

Par ailleurs quand on utilise  clientcert=verify-ca, c'est pour que le serveur vérifie le certificat du client, qui par défaut est
fourni dans ~/.postgresql/postgresql.crt
Or dans la question il ne semble pas que ce soit le cas, il semble que vous mettiez en oeuvre le test
inverse qui consiste à ce que le client vérifie qu'il parle bien avec le bon serveur via le certificat
(~/.postgresql/root.crt par défaut)

Ce qu'il faut fournir dans les deux cas est décrit par https://www.postgresql.org/docs/current/libpq-ssl.html
dans "Client Verification of Server Certificates" et "Client Certificates".

Hors ligne

#3 29/06/2020 09:06:33

pifor
Membre

Re : SSL - besoin d'explications

Dans pg_hba.conf vous pouvez ajouter la méthode CERT:

hostssl db            usr            192.168.0.1/16         cert 

Demander à PostgreSQL de prendre en compte cette modification avec:

pg_ctl reload

Et vérifier dans le log de PostgreSQL qu'il n'y a pas d'erreur (car s'il y a une erreur dans pg_hba.conf, pg_ctl ne dit rien):

2020-06-29 09:00:20.313 CEST [11349] LOG:  received SIGHUP, reloading configuration files

S'il y a une erreur vous avez des messages qui signifient que le modification de pg_hba.conf n'a pas été prise en compte:

2020-06-29 09:03:31.821 CEST [11349] LOG:  received SIGHUP, reloading configuration files
2020-06-29 09:03:31.822 CEST [11349] LOG:  invalid authentication method "clientcert=verify-ca"
2020-06-29 09:03:31.822 CEST [11349] CONTEXT:  line 83 of configuration file "/var/lib/pgsql/12/data/pg_hba.conf"
2020-06-29 09:03:31.822 CEST [11349] LOG:  pg_hba.conf was not reloaded

Dans ce cas PostgreSQL continue de fonctionner mais avec l'ancienne version de pg_hba.conf.


Si vos tests ne fonctionnent pas, précisez quels sont les certificats que vous avez installés côté client ainsi que les message d'erreur à la connexion (de préférence avec psql) et les messages d'erreur correspondants dans le log de PostgreSQL.

Dernière modification par pifor (29/06/2020 09:20:27)


Pierre

Hors ligne

#4 29/06/2020 11:01:43

albourg
Membre

Re : SSL - besoin d'explications

Merci pour ces réponses.
Comme le dit daniel, je cherche juste à ce que le client ne communique que s'il a un certificat... pour l'instant.
Par contre,
1. quelle est la différence entre cert et md5?
2. Si je veux qu'un standby se connecte à ce serveur, comment puis-je lui donner le root.crt dans le connect string?

Merci.

Hors ligne

#5 29/06/2020 12:56:30

pifor
Membre

Re : SSL - besoin d'explications

1. La différence entre cert et md5: cert va utiliser le certificat - qui doit être stocké côté client - pour ne pas demande de mot de passe alors que md5 va demander et vérifier le mot de passe enregistré dans la base.

2. Je ne sais pas.


Pierre

Hors ligne

#6 29/06/2020 13:31:26

albourg
Membre

Re : SSL - besoin d'explications

Donc si je mets md5 il demande le mot de passe mais le certificat est quand même nécessaire à cause de hostssl. Merci.

Reste à flanquer ça dans le connect string du standby.

Hors ligne

Pied de page des forums