如何使用 Postgres 数据库 url 字符串传递证书路径以进行 SSL 连接
How to pass certificate path with Postgres database url string for SSL connection
我正在尝试通过 SSL 为我的 Spring 启动应用程序保护与 AWS RDS 实例的连接。我查看了几个博客和官方 documentation 并相应地修改了我的连接字符串以包含与 SSL 连接相关的某些参数。
我将我的证书放在资源中的证书文件夹中。以下是我尝试通过证书路径的方式:
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
class 在 class 路径(或从文件系统、环境变量等)中指定证书文件。这个 class 有参数 sslfactoryarg
,我们可以在其中添加证书文件的路径。
您的 URL 应如下所示:
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
我正在尝试通过 SSL 为我的 Spring 启动应用程序保护与 AWS RDS 实例的连接。我查看了几个博客和官方 documentation 并相应地修改了我的连接字符串以包含与 SSL 连接相关的某些参数。
我将我的证书放在资源中的证书文件夹中。以下是我尝试通过证书路径的方式:
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
class 在 class 路径(或从文件系统、环境变量等)中指定证书文件。这个 class 有参数 sslfactoryarg
,我们可以在其中添加证书文件的路径。
您的 URL 应如下所示:
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