postgresql - 如何使用 Postgres 数据库 url 字符串传递证书路径以进行 SSL 连接

标签 postgresql ssl jdbc ssl-certificate amazon-rds

我正在尝试通过 SSL 为我的 Spring 启动应用程序保护与 AWS RDS 实例的连接。看了几个博客和官方documentation并相应地修改了我的连接字符串以包含与 SSL 连接相关的某些参数。
我将证书放在资源中的 cert 文件夹中。以下是我尝试通过证书路径的方式:

jdbc:postgresql://myamazondomain.rds.amazonaws.com:5432/db_name?sslmode=verify-full&sslrootcert=/cert/rds-ca-cert_name.p12&password=my_passwrord
我也试过:
jdbc:postgresql://myamazondomain.rds.amazonaws.com:5432/db_name?sslmode=verify-full&sslrootcert=/src/main/resources/cert/rds-ca-cert_name.p12&password=mypassword
但是,当我尝试从我的 ECS 容器连接到 RDS 时,我收到以下错误:
ERROR com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Exception during pool initialization.
org.postgresql.util.PSQLException: Could not open SSL root certificate file /cert/rds-ca-cert_name.p12.

at org.postgresql.ssl.LibPQFactory.<init>(LibPQFactory.java:120)

at org.postgresql.core.SocketFactoryFactory.getSslSocketFactory(SocketFactoryFactory.java:61)

at org.postgresql.ssl.MakeSSL.convert(MakeSSL.java:33)

at org.postgresql.core.v3.ConnectionFactoryImpl.enableSSL(ConnectionFactoryImpl.java:435)

at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:94)

at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:192)

at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49)

at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:195)

at org.postgresql.Driver.makeConnection(Driver.java:454)
有人可以建议这里的错误是什么。将存储在类路径中的证书传递给 jdbc 连接字符串的正确方法是什么。

最佳答案

我们需要使用 SingleCertValidatingFactory类来指定类路径上的证书文件(或来自文件系统、环境变量等)。这个类有参数 sslfactoryarg我们可以在其中添加证书文件的路径。
您的网址应如下所示:jdbc:postgresql://myamazondomain.rds.amazonaws.com:5432/db_name?sslmode=verify-full&sslfactory=org.postgresql.ssl.SingleCertValidatingFactory&sslfactoryarg=classpath:cert/rds-ca-cert_name.p12

关于postgresql - 如何使用 Postgres 数据库 url 字符串传递证书路径以进行 SSL 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62179397/

相关文章:

php - SQL 命令的类型强制转换警告

用于计算每 n 行的平均值的 SQL 查询,步骤 1

ruby-on-rails - Rails 3 + 路由 : The action 'show' could not be found for UsersController 中的 HTTPS 约束

java - 通过java从mysql表中读取行

java - 运行jdbc时出错

postgresql - 临时表在哪里创建?

c# - 使用 Windows Phone 8 连接到 Postgres 数据库

php - 根据 PHP 中的证书验证 SAML 响应中的数字签名

即使在 web.config 之后,Azure Web 应用程序也不会将 http 重定向到 https

java - 在 WHERE 子句中使用字符串条件查询时,PostgreSQL JDBC 为空结果集