关于连接Heroku PostgreSQL时的Vert.x SSL设置

关于连接到Heroku PostgreSQL时Vert.x的SSL设置。

我原本想做的事情

在学习Java和Vert.x并开发API的过程中,我遇到了无法连接到Heroku PostgreSQL的困扰。

由于对Java的经验比较浅显并且还未完全理解,所以可能存在各种错误。

这是什么类型的错误?

使用Vert.x的PgConnectOptions和PgPool尝试连接到Heroku PostgreSQL时出现了以下错误。

Failed to initialize the database connection pool: Trust options must be specified under verify-full or verify-ca sslmode

错误的发生原因

错误信息表示在SSL模式下,必须指定信任选项为verify-full或verify-ca。这意味着没有设置证书来建立SSL连接。

似乎是由于.setTrustAll(true)引起了这个错误。由于PostgreSQL默认禁用了这个选项,所以我认为是出现了错误。

解决办法

在Heroku上的PostgreSQL服务器上,您可以使用Heroku提供的证书。证书通常可以从Heroku的PostgreSQL附加组件配置中获得。通过将该证书包含在项目中,并设置信任选项来解决此问题!

    1. 从Heroku的PostgreSQL配置中下载证书。

 

    1. 将下载的证书移动到项目的资源目录(例:src/main/resources)中。

使用.setTrustOptions方法来设置证书。使用JksOptions来引用证书的位置。

以下是一个设定证书的代码示例。

PgConnectOptions connectOptions = new PgConnectOptions()
    .setPort(port)
    .setHost(host)
    .setDatabase(database)
    .setUser(username)
    .setPassword(password)
    .setSsl(true)
    .setTrustOptions(new JksOptions()
        .setPath("/path/to/your/cert.crt") // リソースディレクトリからの相対パスを指定します。
        .setPassword("the-password")); // もし証明書がパスワードで保護されている場合は設定します。

有点疑问

尽管在Rails中不需要这样的设置…

在Ruby on Rails的环境中,我们可以无需担心SSL验证问题而连接到Heroku PostgreSQL。但是,为什么在Java和Vert.x的环境中会出现这个问题呢?

我认为这个差异主要是由于每个框架和库默认提供的功能以及对安全性的考虑方式不同造成的。

Java的JDBC似乎只提供了最基本的数据库连接功能。而与之相反,Ruby on Rails的ActiveRecord等ORM库不仅提供了数据库连接功能,还提供了生成SQL语句、模型和数据库之间的映射、数据库连接设置等很多应用开发所需的功能。

根据以上的差异,我认为Rails可能不需要这次的设置。

我还没有详细调查过。