У нас есть удаленный сервер БД PostgreSQL, для которого требуется наличие SSL-сертификатов.
У меня есть следующие сертификаты.
root.pem
intermediate.pem
private-chain.pem
public-chain.pem
certificate.cer
certificate.key
И я могуподключиться к удаленной базе данных, используя psql как
psql "port=5432 host=remote-host user=username sslcert=public-chain.pem sslkey=certificate.key dbname=database sslmode=require"
Теперь мне нужно подключиться к той же базе данных из API отдыха на основе Java Spring .Итак, в идеале это потребовало бы создания нажатий клавиш из сертификатов и использования их для подключения к БД.
Проблема в том, что я не могу!Я перепробовал все комбинации сертификатов, публичных цепочек, приватных цепочек, корневых сетей и т. Д. В хранилище ключей.И я попытался передать хранилище ключей в качестве аргументов JVM при вызове файла JAR ( -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
Я также выполнил шаги, описанные здесь , чтобы доверять root ca.Но я думаю, что в этом нет необходимости, поскольку я использую org.postgresql.ssl.NonValidatingFactory
И я запускаю приложение как
java -jar -Dspring.profiles.active=prod application.jar
Любые идеив этом ценятся!Спасибо.