Настройка Wildfly для подключения к БД по SSL

Введение

Создание клиентских trustore и keystore

Конфигурация datasource

Переменные среды JVM

Полезные ссылки

Введение

Перед настройкой защищенного соединения сначала необходимо настроить БД на работу по SSL и проверку клиентских сертификатов. Описание на странице Настройка PostgreSQL на аутентификацию клиентов только по сертификату.

В статье описано как получить необходимые сертификаты и ключи: postgresql.crt, postgresql.key, pg-client.crt, pg-client.key.

Сервер приложений Wildfly для подключения будет использовать клиентские сертификат и ключ, полученные при настройке БД.

Создание клиентских trustore и keystore

Wildfly будет использовать truststore для валидации сертификата БД, а keystore для хранения клиентского ключа и сертификата.

1) С помощью утилиты keytool создаем wildfly.truststore и добавляем в него доверенный сертификат postgresql.crt:

keytool -import -file postgresql.crt -alias postgresql -keystore wildfly.truststore -storepass secret

Будет спрошено доверять ли сертификату: Trust this certificate? [no]:  yes

2) С помощью OpenSSL создаем контейнер pkcs12 для клиентского ключа и сертификата:

openssl pkcs12 -export -in pg-client.crt -inkey pg-client.key -out pg-client.p12 -name pg-client

3) Создаем wildfly.keystore из полученного pkcs12:

keytool -importkeystore -deststorepass secret -destkeystore wildfly.keystore -srckeystore pg-client.p12 -srcstoretype PKCS12 -srcstorepass secret -alias pg-client

4) размещаем полученные truststore и keystore в нужном месте на хосте

Конфигурация datasource

Настройка datasource описана на странице Настройка Datasource

Для включения SSL в connection-url добавляются соответствующие параметры:

<connection-url>jdbc:postgresql://localhost:5432/robin?currentSchema=orchestrator&amp;ssl=true&amp;sslmode=verify-full&amp;sslfactory=org.postgresql.ssl.DefaultJavaSSLFactory</connection-url>

ssl=true - использовать SSL соединение с БД

sslmode=verify-full - шифрование данных, аутентификация по сертификату

sslfactory=org.postgresql.ssl.DefaultJavaSSLFactory - использовать keystore и truststore JVM для установления защищенного соединения (см. Переменные среды JVM)

Исправить существующие datasource можно через веб консоль Wildfly, в файле standalone.xml или с помощью Wildfly CLI:

/subsystem=datasources/data-source=OrchestratorDS/:write-attribute(name=connection-url,value="jdbc:postgresql://localhost:5432/robin?currentSchema=orchestrator&ssl=true&sslmode=verify-full&sslfactory=org.postgresql.ssl.DefaultJavaSSLFactory")

/subsystem=datasources/data-source=QuartzDS/:write-attribute(name=connection-url,value="jdbc:postgresql://localhost:5432/robin?currentSchema=quartz&ssl=true&sslmode=verify-full&sslfactory=org.postgresql.ssl.DefaultJavaSSLFactory")

Переменные среды JVM

Нужно добавить переменные JAVA_OPTS сервера Wildfle и указать путь к полученным клиентским хранилищам.

Для Linux (файл JBOSS_HOME/bin/standalone.conf):

JAVA_OPTS="$JAVA_OPTS -Djavax.net.ssl.keyStore=C:\wildfly-16.0.0.Final\standalone\configuration\wildfly.keystore -Djavax.net.ssl.keyStorePassword=secret"

JAVA_OPTS="$JAVA_OPTS -Djavax.net.ssl.trustStore=C:\wildfly-16.0.0.Final\standalone\configuration\wildfly.truststore -Djavax.net.ssl.trustStorePassword=secret"

Для Windows (файл JBOSS_HOME/bin/standalone.conf.bat) :

set "JAVA_OPTS=%JAVA_OPTS% -Djavax.net.ssl.keyStore=C:\wildfly-16.0.0.Final\standalone\configuration\wildfly.keystore -Djavax.net.ssl.keyStorePassword=secret"

set "JAVA_OPTS=%JAVA_OPTS% -Djavax.net.ssl.trustStore=C:\wildfly-16.0.0.Final\standalone\configuration\wildfly.truststore -Djavax.net.ssl.trustStorePassword=secret"