Несколько подключений к Google Cloud PSQL из Java App (SSL) - PullRequest
0 голосов
/ 14 марта 2019

Здравствуйте,

Я делаю проект с базой данных, где база данных находится в Google Cloud.Проблема заключается в нескольких соединениях, когда проект должен иметь возможность доступа к базе данных из нескольких источников, а облако изначально разрешает это путем ручного внесения в белый список всех IP-адресов, что неприемлемо для моего сценария.

Я пробовалиспользовать SSL, но, к сожалению, я не могу подключиться, что бы я ни делал.Когда я иду без SSL, и я вхожу в белый список своего IP, соединение успешно.

Я новичок в базах данных и о возможных способах подключения к ним.Поэтому мне нужно некоторое базовое объяснение того, что я должен делать или что я делаю неправильно, так как я немного растерялся.

То, что я делал, следуя инструкциям Postgre, Google, веб-сайтов и уже открытых тем:

1) Получил 3 файла из облака - server-ca.pem, client-key.pem, client-cert.pem , куда я импортировал server-ca.pem и client-cert.pem в хранилище ключей Java

2) Пробовал оба способа именования свойствподключиться к базе данных (назвав их все в URL и задав их как свойство), где элементы перечислены в PSQL, сгенерированном облаком Google

PSQL:

psql "sslmode=verify-ca sslrootcert=server-ca.pem \
sslcert=client-cert.pem sslkey=client-key.pem \
hostaddr=MYIP \
port=5432 \
user=postgres dbname=postgres"

Код: (файлы .pam включены в каталог проекта)

public static Connection connectDb(){

    Connection conn = null;
    String url = "jdbc:postgresql://MYIP:5432/";
    Properties props = new Properties();
    props.setProperty("user","postgres");
    props.setProperty("password","admin");
    props.setProperty("ssl","true");
    props.setProperty("sslmode","verify-ca");
    props.setProperty("sslrootcert","server-ca.pem");
    props.setProperty("sslcert","client-cert.pem");
    props.setProperty("sslkey","client-key.pem");
    String name = "postgres";
    String password = "postgres";

    try {
        Class.forName("org.postgresql.Driver");
    } catch (ClassNotFoundException classNotFoundException) {

       classNotFoundException.printStackTrace();
    }

    try {
        conn = DriverManager.getConnection(url, props);
    } catch (SQLException sqlException){
        sqlException.printStackTrace();
    }

    return conn;
}

Журнал ошибок:

org.postgresql.util.PSQLException: The connection attempt failed.
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:292)
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49)
at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:195)
at org.postgresql.Driver.makeConnection(Driver.java:454)
at org.postgresql.Driver.connect(Driver.java:256)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:678)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:190)

Любые советы, помощь, учебные пособия, объяснение того, что я должен делать, что я сделал неправильно, какой подход выбрать, очень поможет, так как я перепробовал все и возможные способы решения этой проблемы, которую я нашел.

PS: Пожалуйста, попробуйте использовать основные и пояснительные слова и названия для вещей, так как я волнуюсь, что могу легко потеряться и запутаться.:)

Спасибо, Лукас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...