以下のパラメーターを設定して、PostgreSQLサーバーでSSLを有効にします。
テストでは、ルートCA証明書へのパスを含むPGSSLROOTCERT変数を使用します。
クライアントがルートCA証明書を提供せずにデータベースに接続することは依然として可能であり、SSL接続が使用されていることをプロンプトが示すことに気づきました。
psql "postgres://user:XXXXXX@hostname:port/postgres"
psql (10.2, server 10.3 (Debian 10.3-1.pgdg90+1))
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.
postgres=# \q
psql "postgres://user:XXXXXX@hostname:port/postgres?sslmode=verify-ca"
psql (10.2, server 10.3 (Debian 10.3-1.pgdg90+1))
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.
postgres=# \q
PGSSLROOTCERT変数が誤った値に設定されている場合:
psql "postgres://user:XXXXXX@hostname:port/postgres?sslmode=verify-ca"
psql: SSL error: certificate verify failed
Pg_hba.confファイル:
local all postgres trust
hostssl all all 0.0.0.0/0 md5
PGSSLROOTCERT
またはsslrootcert
がない場合、ライブラリlibpq
(psql
が使用)は、ファイルのコンパイル済みのデフォルトの場所を検索します。そして、どうやら、それはその場所で見つかります。
Linuxの場合、その場所は~/.postgresql/root.crt
。 「Debian 10.3-1.pgdg90 + 1」が別の場所に見えるようにパッチを当てた可能性もあります。