PostgreSQL · 2 min read · Dec 15, 2025
Certificats SSL pour PostgreSQL
Certificats SSL pour PostgreSQL
Cela décrit comment configurer des certificats ssl pour permettre des connexions cryptées depuis PgAdmin sur une machine cliente vers postgresql sur une machine serveur. L’hypothèse est que postgresql (compilé avec le support ssl) et openssl sont déjà installés et fonctionnels sur le serveur (Linux). PgAdmin est déjà installé sur le client (soit Windows soit Linux).
Sur le serveur, trois certificats sont requis dans le répertoire de données. Le défaut de CentOS est /var/lib/pgsql/data/:
root.crt (certificat racine de confiance)
server.crt (certificat du serveur)
server.key (clé privée)
Émettez des commandes en tant que root.
sudo -cd /var/lib/pgsql/dataGénérez une clé privée (vous devez fournir une phrase de passe).
openssl genrsa -des3 -out server.key 1024Supprimez la phrase de passe.
openssl rsa -in server.key -out server.keyDéfinissez les permissions et le propriétaire appropriés sur le fichier de clé privée.
chmod 400 server.key
chown postgres.postgres server.keyCréez le certificat du serveur.
-subj est un raccourci pour éviter de demander les informations.
-x509 produit un certificat auto-signé plutôt qu’une demande de certificat.
openssl req -new -key server.key -days 3650 -out server.crt -x509 -subj '/C=CA/ST=British Columbia/L=Comox/O=TheBrain.ca/CN=thebrain.ca/[email protected]'Puisque nous auto-signons, nous utilisons le certificat du serveur comme certificat racine de confiance.
cp server.crt root.crtVous devrez éditer pg_hba.conf. Par exemple :
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" est uniquement pour les connexions de socket de domaine Unix
local all all trust
# Connexions locales IPv4 :
host all all 127.0.0.1/32 trust
# Connexions distantes IPv4 pour utilisateurs authentifiés
hostssl all www-data 0.0.0.0/0 md5 clientcert=1
hostssl all postgres 0.0.0.0/0 md5 clientcert=1Vous devez éditer postgresql.conf pour activer ssl :
ssl = onLe serveur PostgreSQL doit être redémarré.
/etc/init.d/postgresql restartSi le serveur échoue à (re)démarrer, consultez le journal de démarrage de PostgreSQL, /var/lib/pgsql/pgstartup.log par défaut pour CentOS, pour connaître la raison.
Sur le client, nous avons besoin de trois fichiers. Pour Windows, ces fichiers doivent être dans le répertoire %appdata%\postgresql. Pour Linux dans le répertoire ~/.postgresql/.
root.crt (certificat racine de confiance)
postgresql.crt (certificat client)
postgresql.key (clé privée)
Générez les fichiers nécessaires sur la machine serveur, puis copiez-les sur le client. Nous allons générer les fichiers nécessaires dans le répertoire /tmp/.
Tout d’abord, créez la clé privée postgresql.key pour la machine cliente, et supprimez la phrase de passe.
openssl genrsa -des3 -out /tmp/postgresql.key 1024openssl rsa -in /tmp/postgresql.key -out /tmp/postgresql.keyEnsuite, créez le certificat postgresql.crt. Il doit être signé par notre racine de confiance (qui utilise le fichier de clé privée sur la machine serveur). De plus, le nom commun du certificat (CN) doit être défini sur le nom d’utilisateur de la base de données avec lequel nous allons nous connecter.
openssl req -new -key /tmp/postgresql.key -out /tmp/postgresql.csr -subj '/C=CA/ST=British Columbia/L=Comox/O=TheBrain.ca/CN=www-data'openssl x509 -req -in /tmp/postgresql.csr -CA root.crt -CAkey server.key -out /tmp/postgresql.crt -CAcreateserialCopiez les trois fichiers que nous avons créés depuis le répertoire /tmp/ du serveur vers la machine cliente.
Copiez le certificat racine de confiance root.crt de la machine serveur vers la machine cliente (pour Windows pgadmin %appdata%\postgresql\ ou pour Linux pgadmin ~/.postgresql/). Changez les permissions du fichier postgresql.key pour restreindre l’accès uniquement à vous (probablement pas nécessaire sur Windows car l’accès restreint est déjà hérité). Supprimez les fichiers du répertoire /tmp/ du serveur.
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.