Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Postgresql JDBC SSL_Java_Postgresql_Ssl_Jdbc_Spring Jdbc - Fatal编程技术网

Java Postgresql JDBC 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

我们有一个远程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=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