Java Postgresql JDBC SSL
我们有一个远程PostgreSQL DB服务器,需要提供SSL证书才能连接到它 我随身携带以下证书Java Postgresql JDBC SSL,java,postgresql,ssl,jdbc,spring-jdbc,Java,Postgresql,Ssl,Jdbc,Spring Jdbc,我们有一个远程PostgreSQL DB服务器,需要提供SSL证书才能连接到它 我随身携带以下证书 root.pem intermediate.pem private-chain.pem public-chain.pem certificate.cer certificate.key 并且我能够使用psqlas连接到远程数据库 psql "port=5432 host=remote-host user=username sslcert=public-chain.pem sslkey=certi
root.pem
intermediate.pem
private-chain.pem
public-chain.pem
certificate.cer
certificate.key
并且我能够使用psqlas连接到远程数据库
psql "port=5432 host=remote-host user=username sslcert=public-chain.pem sslkey=certificate.key dbname=database sslmode=require"
现在,我需要从基于Java Spring的Rest API连接到同一个数据库。因此,理想情况下,这需要从cert构建击键,并使用该击键连接到db
问题是,我不能!我在密钥库中尝试了证书、公共链、私有链、根ca等的所有组合。在调用jar文件(-Djavax.net.ssl.trustStore-Djavax.net.ssl.trustStorePassword-Djavax.net.ssl.keystore-Djavax.net.ssl.keystore-Djavax.net.ssl.keystrepassword)时,我尝试将密钥库作为JVM参数传递
我还尝试指向PostgreSQL JDBC连接字符串(JDBC:p)中的击键ostgresql://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]
这是证书配置
export PGSSLCERT=/tmp/client.cer
export PGSSLKEY=/tmp/client.key
export PGSSLMODE=allow
我还按照描述的步骤信任根ca。但我想这不是必需的,因为我使用的是org.postgresql.ssl.NonValidatingFactory
我正在启动这个应用程序
java -jar -Dspring.profiles.active=prod application.jar
对此有任何见解都将不胜感激!谢谢。您的pb_hba.conf设置是什么样子的
JDBC驱动程序只支持信任、标识、密码、md5和加密身份验证方法 因此,您的java应用程序必须使用密码和证书进行连接。您可以在pb_hba.conf中指定:
hostssl all all 0.0.0.0/0 md5 clientcert=1
你能分享你试图运行的代码吗?将有助于理解和帮助。您为这些系统属性和连接字符串设置了哪些值?很抱歉,回复太晚。我已经编辑了问题并添加了详细信息。这就是你想要的吗?@abisheksampath你能告诉我你是如何解决这个问题的吗?我还遇到了类似的问题。“JDBC驱动程序只支持信任、标识、密码、md5和加密身份验证方法”源代码?信任、标识、密码、md5、gss和加密身份验证方法
hostssl all all 0.0.0.0/0 md5 clientcert=1