Ich versuche, das SSL-Zertifikat für den PostgreSQL-Server zu konfigurieren. Ich habe eine Zertifikatdatei (server.crt) und einen Schlüssel (server.key) im Datenverzeichnis erstellt und den Parameter SSL auf "on" aktualisiert, um eine sichere Verbindung zu ermöglichen.
Ich möchte nur, dass nur der Server auf der Clientseite mit Serverzertifikaten authentifiziert wird, und ich benötige nicht die Authentizität des Clients auf der Serverseite. Ich benutze psql als Client, um die Befehle zu verbinden und auszuführen.
Ich benutze PostgreSQL 8.4 und Linux. Ich habe mit dem folgenden Befehl versucht, eine Verbindung zum Server mit aktiviertem SSL herzustellen
psql "postgresql://localhost:2345/postgres?sslmode=require"
aber ich bekomme
psql: invalid connection option "postgresql://localhost:2345/postgres?sslmode"
Was mache ich hier falsch? Ist die Art und Weise, wie ich versuche, mit aktiviertem SSL-Modus eine Verbindung zum Server herzustellen, korrekt? Ist es in Ordnung, nur den Server und nicht den Client zu authentifizieren?
sslmode=verify-full
nicht nurrequire
.Antworten:
psql
Unter 9.2 wird diese URL-ähnliche Syntax für Optionen nicht akzeptiert.Die Verwendung von SSL kann über die
sslmode=value
Option in der Befehlszeile oder die Umgebungsvariable PGSSLMODE gesteuert werden. Standardmäßig werdenprefer
SSL-Verbindungen jedoch zuerst automatisch versucht, ohne dass etwas angegeben wird.Beispiel mit einer Conninfo-Zeichenfolge ( aktualisiert für psql 8.4 )
Weitere Optionen finden Sie auf der Handbuchseite .
quelle
psql -h localhost -p 2345 -U thirunas -d postgres "sslmode=require" -f test_schema.ddl
aber es heißtsql: warning: extra command-line argument "sslmode=require" ignored
psql -h localhost "sslmode=require" -p 2345 -U thirunas -d postgres -f test_schema.ddl
. Warnungpsql: warning: extra command-line argument "sslmode=require" ignored
psql --set=sslmode=require -h localhost -p 2345 -U thirunas \ -d postgres -f test_schema.ddl
Ein weiteres Beispiel für die sichere Verbindung mit der von Azure verwalteten Postgres-Datenbank:
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
quelle
--set=sslmode=require
definiert eine psql-Variable, die überhaupt nicht am Authentifizierungsprozess beteiligt ist. Es wird nichts unternommen , um SSL zu erzwingen.Die folgenden Optionen waren nützlich, um alle Dateien für eine selbstsignierte Postgres-Instanz bereitzustellen
quelle
Laut der postgres psql-Dokumentation sollten nur die Verbindungsparameter in der conninfo-Zeichenfolge enthalten sein (aus diesem Grund befindet sich in unserem Beispiel --username nicht in dieser Zeichenfolge).
quelle
conninfo
Zeichenfolge verschieben. Aber ich denke auch, dass die Dokumente auch hier klarer gemacht werden könnten.und aktualisieren
/var/lib/pgsql/10/data/pg_hba.conf
, um die Authentifizierungsmethode in zu änderncert
. Überprüfen Sie den folgenden Link für weitere Informationen:https://www.postgresql.org/docs/9.1/auth-pg-hba-conf.html
quelle
Auf dem psql-Client v12 konnte ich im psql-Client keine Option zum Aktivieren finden
sslmode=verify-full
.Am Ende habe ich Umgebungsvariablen verwendet:
quelle
Nun, Ihre Cloud stellt alle Informationen mit dem folgenden Befehl in der CLI bereit, wenn die Verbindung im SSL-Modus erforderlich ist:
quelle