web-dev-qa-db-ja.com

PostgreSQL-ルートCA証明書を提供しないSSL接続?

以下のパラメーターを設定して、PostgreSQLサーバーでSSLを有効にします。

  • ssl = True
  • ssl_ca_file = 'ルートCAへのパス'
  • ssl_cert_file = 'server-to-server-crt'
  • ssl_key_file = 'サーバーキーへのパス'

テストでは、ルート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
2
TheWhiteWolf

PGSSLROOTCERTまたはsslrootcertがない場合、ライブラリlibpqpsqlが使用)は、ファイルのコンパイル済みのデフォルトの場所を検索します。そして、どうやら、それはその場所で見つかります。

Linuxの場合、その場所は~/.postgresql/root.crt。 「Debian 10.3-1.pgdg90 + 1」が別の場所に見えるようにパッチを当てた可能性もあります。

1
jjanes