104 votes

Utilisation de psql pour se connecter à PostgreSQL en mode SSL

J'essaie de configurer un certificat ssl pour le serveur PostgreSQL. J'ai créé un fichier de certificat (server.crt) et une clé (server.key) dans le répertoire des données et j'ai mis à jour le paramètre SSL sur "on" pour activer la connexion sécurisée.

Je veux juste que seul le serveur soit authentifié avec les certificats du serveur du côté client et ne pas exiger l'authenticité du client du côté serveur. J'utilise psql comme client pour me connecter et exécuter les commandes.

J'utilise PostgreSQL 8.4 et Linux. J'ai essayé de me connecter au serveur avec SSL activé avec la commande suivante

       psql "postgresql://localhost:2345/postgres?sslmode=require"

mais je reçois

       psql: invalid connection option "postgresql://localhost:2345/postgres?sslmode"

Qu'est-ce que je fais de mal ici ? La façon dont j'essaie de me connecter au serveur avec le mode SSL activé est-elle correcte ? Est-il possible d'authentifier uniquement le serveur et non le client ?

134voto

Daniel Vérité Points 15675

psql sous 9.2 n'accepte pas cette syntaxe de type URL pour les options.

L'utilisation de SSL peut être motivée par le sslmode=value sur la ligne de commande ou l'option PGSSLMODE variable d'environnement, mais la valeur par défaut étant prefer Si vous avez choisi l'option de connexion SSL, les connexions SSL seront essayées en premier automatiquement sans rien spécifier.

Exemple avec une chaîne conninfo ( mis à jour pour psql 8.4 )

psql "sslmode=require host=localhost dbname=test"

Lire l'article page de manuel pour plus d'options.

32voto

Andrii Batiuk Points 393
psql --set=sslmode=require -h localhost -p 2345 -U thirunas \
-d postgres -f test_schema.ddl

Un autre exemple pour se connecter en toute sécurité à la base de données Postgres gérée par Azure :

psql --file=product_data.sql --host=hostname.postgres.database.azure.com --port=5432 \
--username=postgres@postgres-esprit --dbname=product_data \
--set=sslmode=verify-full --set=sslrootcert=/opt/ssl/BaltimoreCyberTrustRoot.crt.pem

8voto

Julian Chick Points 91

J'ai trouvé les options suivantes utiles pour fournir tous les fichiers d'une instance postgres auto-signée.

psql "host={hostname} sslmode=prefer sslrootcert={ca-cert.pem} sslcert={client-cert.pem} sslkey={client-key.pem} port={port} user={user} dbname={db}"

8voto

Fred Points 131

Sur psql client v12, je n'ai pas pu trouver l'option dans psql client pour activer sslmode=verify-full .

J'ai fini par utiliser des variables d'environnement :

PGSSLMODE=verify-full PGSSLROOTCERT=server-ca.pem psql -h your_host -U your_user -W -d your_db

5voto

Sabuhi Shukurov Points 637

Vous pouvez fournir toutes les informations avec la commande suivante dans l'interface CLI, si la connexion nécessite le mode SSL :

psql "sslmode=verify-ca sslrootcert=server-ca.pem sslcert=client-cert.pem sslkey=client-key.pem hostaddr=your_host port=5432 user=your_user dbname=your_db"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X