为 Play Framework 配置 HikariCP 以通过 SSL 连接到 Postgres?

Configuring HikariCP for the Play Framework to connect to Postgres over SSL?

我正在尝试让 Play Framework 通过 SSL 连接到 Postgres 数据库。 SSL 在 Postgres 上配置了 LetsEncrypt。

没有 SSL,Play 连接数据库没有问题。但是有了它,我得到了错误:

java.io.FileNotFoundException: /home/mainuser/.postgresql/root.crt (No such file or directory)

需要说明的是,证书文件都放在目录/etc/postgresql/13/main/下。与数据库的 ssl 连接在本地和 Play 之外的远程都工作得很好。

当前application.conf包括:

db.default.driver=org.postgresql.Driver
db.default.url="jdbc:postgresql://localhost/my_db?ssl=on"
db.default.username=${?DATABASE_USER}
db.default.password=${?DATABASE_PASSWORD}
db.default.hikaricp.connectionTestQuery = "SELECT 1"


fixedConnectionPool = 5

database.dispatcher {
  executor = "thread-pool-executor"
  throughput = 1
  thread-pool-executor {
    fixed-pool-size = ${fixedConnectionPool}
  }
}

我希望能够通过 SSL 在本地和远程连接到此数据库。官方文档

如有任何建议,我们将不胜感激。

您可能想要设置 PostgreSQL JDBC 驱动程序的 sslrootcert 变量以更改证书的位置。我引用驾驶手册:

sslrootcert = String

File name of the SSL root certificate. Defaults to defaultdir/root.crt where defaultdir is ${user.home}/.postgresql/ in *nix systems and %appdata%/postgresql/ on windows

It can be a PEM encoded X509v3 certificate

参见 examplehttps://jdbc.postgresql.org/documentation/head/connect.html。虽然我还没有尝试过,但您应该可以将它作为进一步的参数添加到您的 JDBC 连接字符串,db.default.url,例如

db.default.url="jdbc:postgresql://localhost/my_db?ssl=on&sslrootcert=/new/path/cert"

如果它的 application.conf 设置不明显或不存在。