Как использовать SSL-шифрование при подключении Vaadin App с Hibernate к MariaDB в Azure - PullRequest
0 голосов
/ 21 октября 2019

В настоящее время я работаю над приложением Java 8 с Vaadin и Hibernate, которое пытаюсь перенести в Azure для тестирования. До сих пор все работало, за исключением одной вещи:
Когда я активирую опцию требуется SSL в MariaDB в Azure, я больше не могу подключиться:

Caused by: java.sql.SQLException: SSL connection is required. Please specify SSL options and retry.

К сожалению, яЯ не писал это приложение сам, и я не слишком хорошо знаком ни с Vaadin, ни с Hibernate, ни даже с Java в целом, а также с тем, как устанавливать соединения ssl или db с ними.
Поэтому мне нужна помощь:

Этострока подключения JDBC в файле Servlet.java, где, по моему мнению, происходит инициализация db:

Connection con = DriverManager.getConnection("jdbc:mysql://<username>.mariadb.database.azure.com:3306/<db>?autoReconnect=true", "<username>", "<password>");


, которую я изменил, просто добавив ее в URL: &useSSL=true&requireSSL=true&verifyServerCertificate=true

Теперь приложение больше не останавливается на инициализации БД, но все еще падает до того, как страница полностью отображается, с тем же сообщением об ошибке.

Я обнаружил hibernate.cfg.xml со следующим содержимым (я удалилсопоставления, чтобы сделать его короче):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <!-- Hibernate -->
        <property name="hibernate.use_sql_comments">true</property>
        <property name="hibernate.format_sql">true</property>
        <property name="hibernate.show_sql">false</property>
        <property name="hibernate.connection.autocommit">true</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>

        <!-- Hikari -->
        <property name="hibernate.connection.provider_class">com.zaxxer.hikari.hibernate.HikariConnectionProvider</property>
        <property name="hibernate.hikari.dataSourceClassName">com.mysql.jdbc.jdbc2.optional.MysqlDataSource</property>
        <property name="hibernate.hikari.dataSource.url">jdbc:mysql://dbname.mariadb.database.azure.com:3306/db</property>
        <property name="hibernate.hikari.dataSource.user">username</property>
        <property name="hibernate.hikari.dataSource.password">password</property>
        <property name="hibernate.hikari.dataSource.cachePrepStmts">true</property>
        <property name="hibernate.hikari.dataSource.prepStmtCacheSize">250</property>
        <property name="hibernate.hikari.dataSource.prepStmtCacheSqlLimit">2048</property>
        <property name="hibernate.hikari.dataSource.useServerPrepStmts">true</property>
    </session-factory>

</hibernate-configuration>


Что мне нужно изменить там, чтобы использовать SSL для соединения?

1 Ответ

1 голос
/ 22 октября 2019

Вы можете попробовать:

<property name="hibernate.hikari.dataSource.url">jdbc:mysql://dbname.mariadb.database.azure.com:3306/db?useSSL=true</property>

Насколько я понимаю, свойства в hibernate.cfg.xml будут наконец использованы для генерации всей строки соединения. Таким образом, если прямого свойства для useSSL нет, вы можете добавить его в URL вручную.

...