postgresql 无法理解Elixir Phoenix Ecto的Postgres适配器中的ssl_opts

ryevplcw  于 2023-04-29  发布在  PostgreSQL
关注(0)|答案(1)|浏览(119)

所以我在Kubernetes上安装了Percona Postgres Operator和Distribution。一切工作正常,我可以通过使用helm安装过程中生成的ssl证书来做他们安装网站上提到的检查。在我的运行中。exs,我为postgres配置了这个:

config :core, Repo,
  adapter: Ecto.Adapters.Postgres,
  username: System.get_env("POSTGRES_USERNAME"),
  password: System.get_env("POSTGRES_PASSWORD"),
  database: System.get_env("POSTGRES_DB"),
  hostname: System.get_env("POSTGRES_HOST"),
  ssl_opts: [verify: :verify_peer, cacertfile: "./ca.crt",versions: [:"tlsv1.3"]],
  ssl: true,
  pool_size: 10

当我尝试执行mix ecto.create时,我得到错误:

08:47:41.422 [error] Postgrex.Protocol (#PID<0.2436.0>) failed to connect: ** (DBConnection.ConnectionError) ssl connect: TLS client: In state wait_cert at ssl_handshake.erl:2071 generated CLIENT ALERT: Fatal - Bad Certificate

显然,如果我验证::verify_none,它的工作原理就像一个魅力,但然后我可以把任何东西作为cacert,它的工作原理。我不明白这是因为这个证书与psql协议的作品。有人能解释这种行为,也许想一个解决方案?
PS:我试着把它加进去。crt到受信任的证书,但无济于事。

j2datikz

j2datikz1#

ca.crt必须来自签署Postgres证书的CA。您应该在-ssl-ca secret中使用证书<cluster_name>。

相关问题