Mettre en place SSL pour PostgreSQL

Petit aide-mémoire pour mettre en place ce qu’il faut pour travailler en SSL avec PostgreSQL.

Mettre en place une CA

Il faut commencer par mettre en place une CA

Créer un certificat pour le serveur

Se placer dans le dossier /etc/ssl

cd /etc/ssl

Créer la CSR et retirer la passphrase

D’abord Créer la CSR :

openssl req -new -text -out server.csr

Donner une passphrase quelconque (on va l’enlever après pour que PostgreSQL (re)démarre sans demander un mot de passe à chaque fois). Indiquer le nom de la machine dans Common Name.

Puis retirer la passphrase :

openssl rsa -in privkey.pem -out server.key
rm privkey.pem

Indiquer la passphrase précédemment entrée puis (auto) signer la clé avec notre CA :

openssl ca -out server.crt -infiles server.csr 

Fournir les certificats à PostgreSQL

Comme la documentation de PostgreSQL l’indique, il faut placer les certificats dans le dossier $PGDATA (/var/lib/postgresql/9.1/main par exemple dans Debian/Ubuntu) :

Le certificat de la CA qui signe les certificats utilisateurs :

cp /etc/ssl/maCA/root-ca.crt /var/lib/postgresql/9.1/main/root.crt

Le certificat du serveur (signé par la CA) que le client vérifiera et sa clé privée :

cp /etc/ssl/maCA/server.crt /var/lib/postgresql/9.1/main/server.crt
cp /etc/ssl/maCA/server.key /var/lib/postgresql/9.1/main/server.key

S’assurer que les droits sur la clé privée sont bien restreints :

chown postgres:postgres /var/lib/postgresql/9.1/main/server.key
chmod 0600 /var/lib/postgresql/9.1/main/server.key

Astuces

Le fichier pg_hba.conf

Pour autoriser une connexion via SSL, il faut une ligne comme celle-ci :

hostssl     dbname      myappuser       0.0.0.0/0       cert    map=monclient

Elle dit, en substance : autoriser un utilisateur qui se présente avec un certificat valide à se connecter à la base dbname avec le compte myappuser. Bien sûr, il faut que myappuser ait les droits sur la base en question. La map est facultative, voir ci-dessous. La méthode d’authentification cert ne requiert pas de mot de passe, il suffit d’un certificat valide.

Le fichier pg_ident.conf

Il permet d’établir un lien entre le Common Name stocké dans le certificat et un utilisateur de la base de données :

#mapname         common name         db user
monclient        pierredupont        myappuser

Lorsque l’application se connecte à PostgreSQL, elle présente le certificat, la base de données souhaitée et le nom de l’utilisateur (myappuser). Le mapping permet d’autoriser le certificat ayant pierredupont comme Common Name à se connecter en tant que myappuser.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *