【发布时间】:2019-03-29 07:16:38
【问题描述】:
我们有一个远程 PostgreSQL 数据库服务器,需要提供 SSL 证书才能连接到它。
我有以下证书。
root.pem
intermediate.pem
private-chain.pem
public-chain.pem
certificate.cer
certificate.key
我可以使用 psql as
连接到远程数据库psql "port=5432 host=remote-host user=username sslcert=public-chain.pem sslkey=certificate.key dbname=database sslmode=require"
现在,我需要从 基于 Java Spring 的 Rest API 连接到同一个数据库。因此,理想情况下,这需要从证书构建击键并使用它连接到数据库。
问题是,我做不到!我已经在密钥库中尝试了证书、公共链、私有链、根 ca 等的所有组合。我尝试在调用 jar 文件时将密钥库作为 JVM 参数传递(-Djavax.net.ssl.trustStore -Djavax.net.ssl.trustStorePassword -Djavax.net.ssl.keyStore -Djavax.net.ssl .keyStorePassword)。
我还尝试从 PostgreSQL JDBC 连接字符串中指向击键(jdbc:postgresql://remote-host:5432/database?ssl=true&sslcert='filename'&sslkey='key')。不确定这是否是正确的方法。
但我不断收到此错误。
Caused by: org.postgresql.util.PSQLException: FATAL: connection requires a valid client certificate
at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:473) ~[postgresql-42.2.2.jar!/:42.2.2]
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:205) ~[postgresql-42.2.2.jar!/:42.2.2]
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49) ~[postgresql-42.2.2.jar!/:42.2.2]
at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:195) ~[postgresql-42.2.2.jar!/:42.2.2]
at org.postgresql.Driver.makeConnection(Driver.java:452) ~[postgresql-42.2.2.jar!/:42.2.2]
at org.postgresql.Driver.connect(Driver.java:254) ~[postgresql-42.2.2.jar!/:42.2.2]
我无法弄清楚为什么它适用于 psql 而不适用于 jdbc。
编辑 1:
目前我正在尝试以下方法。这是spring数据源配置
spring.datasource.url=jdbc:postgresql://remote-host:5432/database?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
spring.datasource.username=username
这是证书配置
export PGSSLCERT=/tmp/client.cer
export PGSSLKEY=/tmp/client.key
export PGSSLMODE=allow
我还按照here 中描述的步骤来信任 root ca。但我想这是没有必要的,因为我使用的是 org.postgresql.ssl.NonValidatingFactory
我正在启动应用程序
java -jar -Dspring.profiles.active=prod application.jar
感谢您对此的任何见解!谢谢。
【问题讨论】:
-
你能分享你试图运行的代码吗?将有助于理解和帮助。
-
您为这些系统属性和连接字符串设置了哪些值?
-
抱歉回复晚了。我已经编辑了问题并添加了详细信息。这就是你要找的东西吗?
-
@abisheksampath 你能更新一下你是如何解决这个问题的吗?我也遇到了类似的问题。
标签: java postgresql ssl jdbc spring-jdbc