Postgresql JDBC SSL - PullRequest
       25

Postgresql JDBC SSL

0 голосов
/ 24 октября 2018

У нас есть удаленный сервер БД 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

Любые идеив этом ценятся!Спасибо.

1 Ответ

0 голосов
/ 28 марта 2019

Как выглядит ваша настройка pb_hba.conf?

Драйвер JDBC поддерживает только методы аутентификации trust, идент, пароль, md5 и crypt.

Таким образом, вашему java-приложению придется подключаться с использованием пароля и сертификата.Вы можете указать это в вашем файле pb_hba.conf:

hostssl all all 0.0.0.0/0 md5 clientcert=1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...