16.8. Connexions TCP/IP sécurisées avec SSL

PostgreSQL dispose d'un support natif pour l'utilisation de connexions SSL, cryptant ainsi les communications clients/serveurs pour une sécurité améliorée. Ceci requiert l'installation d'OpenSSL à la fois sur le système client et sur le système serveur et que ce support soit activé au moment de la construction de PostgreSQL (voir le Chapitre 14).

Avec le support SSL compilé, le serveur PostgreSQL peut être lancé avec SSL activé en activant ssl dans postgresql.conf. Lors d'un démarrage en mode SSL, le serveur cherchera les fichiers server.key et server.crt dans le répertoire des données, qui doivent contenir respectivement la clé privée du serveur et le certificat. Ces fichiers doivent être configurés correctement avant qu'un serveur dont le mode SSL est activé puisse démarrer. Si la clé privée est protégée avec une phrase, le serveur la demandera et ne se lancera pas tant que celle-ci n'aura pas été saisie.

Le serveur écoutera les connexions SSL et standard sur le même port TCP et négociera avec tout client se connectant qu'il utilise ou non SSL. Voir le Chapitre 19 pour savoir comment forcer l'utilisation de SSL pour certaines connexions.

Pour les détails sur la création de la clé privé et du certificat du serveur, référez-vous à la documentation d'OpenSSL. Un simple certificat signé par soi-même peut être utilisé pour des tests mais un certificat signé par une autorité (CA) (soit un des CA globaux soit un local) devrait être utilisé en production de façon à ce que le client puisse vérifier l'identité du serveur. Pour créer rapidement un certificat signé soi-même, utilisez la commande OpenSSL suivante :

openssl req -new -text -out server.req

Remplissez les informations que openssl réclame. Assurez-vous que vous entrez le nom local de l'hôte sur << Common Name >> ; le mot de passe de challenge peut être laissé vide. Le programme générera une clé qui est protégée par une phrase ; elle n'acceptera pas une phrase qui fait moins de quatre caractères. Pour supprimer la phrase (ce que vous devez faire si vous voulez automatiser le lancement du serveur), lancez les commandes

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

Saisissez l'ancienne phrase pour débloquer la clé existante. Maintenant, saisissez

openssl req -x509 -in server.req -text -key server.key -out server.crt
chmod og-rwx server.key

pour remplacer le certificat en un certificat signé par soi-même et copiez la clé et le certificat là où le serveur les cherchera.

Si la vérification des certificats du client est requise, placez les certificats du CA que vous souhaitez vérifier dans le fichier root.crt du répertoire des données. S'il est présent, un certificat client sera demandé à partir du client lors du lancement d'une connexion SSL et il doit y avoir des certificats présent dans root.crt.

Quand le fichier root.crt est absent, les certificats du client ne seront ni demandés ni vérifiés. Dans ce mode, SSL fournit la sécurité de la communication pas l'authentification.

Les fichiers server.key, server.crt, et root.crt sont seulement examinés lors du lancement du serveur ; donc vous devez relancer le serveur pour prendre en compte les modifications.