使用带有Elixir后端的SSL连接到Azure托管的PostgreSQL

时间:2019-01-14 16:13:48

标签: postgresql azure ssl elixir ecto

我正在尝试使用SSL在本地连接到Azure托管的PostgreSQL(版本9.6)。不幸的是,它没有按预期工作。后端运行在以Alpine Linux为基本映像的Docker容器中,Elixir 1.7.4是带有ecto-sql(v.3.0.0)的当前ecto版本。

在Azure Enforce SSL connection上已启用,并设置了相应的防火墙规则。

我在本地使用数据库工具(TablePlus)进行了检查,该工具可以轻松连接到在线数据库。

这是我的配置:

config :my_app, MyApp.Repo,
  username: "admin@postgres-dev",
  password: "secret",
  database: "dev",
  port: 5432,
  hostname: "postgres-dev.postgres.database.azure.com",
  ssl: true,
  ssl_opts: [
    versions: [:"tlsv1.2"],
    cacertfile: "priv/root.pem"
  ],
  pool_size: 15

我还在:ssl的{​​{1}}中添加了extra_applications

由于在stackoverflow上有answer,因此我明确设置了mix.exs。 我从Azure获得了证书,并按照此处所述使用OpenSSL对其进行了解码。

我在没有versions的情况下进行了尝试,只在ssl_opts设置了一个属性,并且还使用了ssl_opts(带有和不带有查询参数:database_url)来代替描述所有属性都是单独的。

我总是遇到相同的错误:

?ssl=true

使用其他(Mix) The database for MyApp.Repo couldn't be created: connection not available and request was dropped from queue after 2844ms. You can configure how long requests wait in the queue using :queue_target and :queue_interval. See DBConnection.start_link/2 for more information 也会导致错误:

versions

所以这绝对不是解决方案

不设置14:39:26.222 [error] GenServer #PID<0.500.0> terminating ** (DBConnection.ConnectionError) ssl connect: Invalid TLS option: {'tlsv1.3',{versions,['tlsv1.3']}} - {:options, {:"tlsv1.3", {:versions, [:"tlsv1.3"]}}} (db_connection) lib/db_connection/connection.ex:84: DBConnection.Connection.connect/2 (connection) lib/connection.ex:622: Connection.enter_connect/5 (stdlib) proc_lib.erl:249: :proc_lib.init_p_do_apply/3 Last message: nil State: Postgrex.Protocol ** (Mix) The database for MyApp.Repo couldn't be created: killed 时,我会收到预期的错误:

ssl: true

有没有人尝试过此方法并且可以提供帮助?

1 个答案:

答案 0 :(得分:0)

在这里使用TSL 1.2。

在TLS握手中,您正在连接的服务器将发送其证书。您不需要提供它。

ssl: true,
ssl_opts: [
  versions: [:"tlsv1.2"]
]

为避免超时问题....

timeout: 120_000,
queue_target: 10_000,
queue_interval: 100_000