Настройка Wildfly для подключения к БД по SSL¶
Создание клиентских trustore и keystore
Введение¶
Перед настройкой защищенного соединения сначала необходимо настроить БД на работу по 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&ssl=true&sslmode=verify-full&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"
Полезные ссылки¶
Пример настройки защищенного соединения между WildFly и БД: https://mirocupak.com/secure-database-connection-with-wildfly/
Настройка SSL на WildFly: http://www.mastertheboss.com/jboss-server/jboss-security/complete-tutorial-for-configuring-ssl-https-on-wildfly
Документация postgresql по ssl: https://www.postgresql.org/docs/11/libpq-ssl.html
Параметры JDBC драйвера postgresql: https://jdbc.postgresql.org/documentation/head/connect.html