Подключаемся к MariaDB в РЕДОС Linux с использованием сертификатов и SSL в Windows 10 через HeidiSQL
В процессе разработки и обслуживания БД вам, возможно, потребуется удаленно подключиться к серверу MariaDB. Подключение без использования защищенного подключения несет угрозу несанкционированного доступа к серверу, так как пароль передается в открытом виде и может быть перехвачен злоумышленниками.
Для защиты соединения при подключении к удаленному серверу MariaDB нужно использовать SSL.
Сегодня мы рассмотрим защищенное подключение к удаленному серверу MariaDB с использованием HeidiSQL.
Здесь я не буду подробно рассматривать процесс выдачи сертификата, так как всё уже описано в статье.
В прошлой статье мы рассмотрели создание локального CA, сегодня мы будем использовать его для выпуска сертификатов.
Выпуск сертификата для сервера
Выпустим сертификат:
sudo su ca
cd ~/req
mkdir mariadb-srv-1
cd mariadb-srv-1
openssl req -new -keyout private.key -out server.req -config ../openssl.cnf -extensions v3_req -subj "/C=RU/ST=Magadan Region/L=Magadan/O=AltuninVV/CN=mariadb-srv-1.altuninvv.ru"
cd ~/ca
./easyrsa import-req ~/req/mariadb-srv-1/server.req mariadb-srv-1
./easyrsa --subject-alt-name='DNS:mariadb-srv-1.altuninvv.ru,IP:192.168.1.44' sign-req server mariadb-srv-1
cp /home/ca/ca/pki/issued/mariadb-srv-1.crt ~/req/mariadb-srv-1/public.crt
cd ~/req/mariadb-srv-1
openssl rsa -in private.key -out private.keyСкопируем файлы:
/home/ca/req/mariadb-srv-1/private.key
/home/ca/req/mariadb-srv-1/public.crt
/home/ca/ca/pki/ca.crtВ папку ~/ssl на сервере с mariadb.
Создадим папку для файлов с ключами:
sudo mkdir /etc/ssl/mariadbСкопируем файлы в папку:
sudo cp ~/ssl/private.key /etc/ssl/mariadb/
sudo cp ~/ssl/public.crt /etc/ssl/mariadb/
sudo cp ~/ssl/ca.crt /etc/ssl/mariadb/Настройка mariadb
Создадим файл для конфигурации SSL:
sudo touch /etc/my.cnf.d/ssl.cnf
sudo mcedit /etc/my.cnf.d/ssl.cnfСодержимое:
[mariadb]
ssl_cert =/etc/ssl/mariadb/public.crt
ssl_key = /etc/ssl/mariadb/private.key
ssl_ca = /etc/ssl/mariadb/ca.crtПерезапустим
sudo systemctl restart mariadbПроверим
mysql -u root -pSHOW VARIABLES LIKE 'have_ssl';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_ssl | YES |
+---------------+-------+
1 row in set (0.001 sec)На сервере включена поддержка SSL.
Выпускаем сертификат для клиента
Вернемся на сервер с CA. Допустим, мы будем выпускать сертификат для пользователя altuninvv:
sudo su ca
mkdir ~/req/altuninvv
cd ~/req/altuninvv
openssl req -new -keyout private.key -out cert.req -config ../openssl.cnf -extensions v3_req -subj "/C=RU/ST=Magadan Region/L=Magadan/O=AltuninVV/O=Users/CN=AltuninVV"
openssl rsa -in private.key -out private.key
cd ~/ca
./easyrsa import-req ~/req/altuninvv/cert.req altuninvv
./easyrsa sign-req client altuninvv
cp /home/ca/ca/pki/issued/altuninvv.crt ~/req/altuninvv/public.crtОбратите внимание, для клиента мы используем команду:
./easyrsa sign-req client altuninvv Тестировать подключение мы будем в HeidiSQL
Перейдем в Windows 10
Далее мы будем работать в консоли cmd
cd %USERPROFILE%\Создадим папку для ключей:
mkdir .ssl_keysСоздадим файлы для ключей:
cd .ssl_keys
type nul > private.key
type nul > public.key
type nul > ca.keyНа сервере CA запустим и вставим содержимое в соответствующие файлы в Windows 10:
cat /home/ca/ca/pki/ca.crt
cat /home/ca/req/altuninvv/private.key
cat /home/ca/req/altuninvv/public.crtСоздание пользователя для подключения с MariaDB
Обратите внимание! Сертификат не имеет ничего общего с имена пользователей на сервере! Он используется только для инициализации соединения посредством SSL!
Мы создадим пользователя, который сможет подключаться только при использовании SSL!
Перейдем на сервер с MariaDB:
mysql -u root -pЗапустим из консоли mysql:
CREATE USER 'root'@'192.168.1.40' IDENTIFIED BY 'PaSSw0rD' REQUIRE SSL;
GRANT ALL ON *.* TO 'root'@'192.168.1.40' WITH GRANT OPTION;
FLUSH PRIVILEGES;
quit;Перезапустим:
sudo systemctl restart mariadbПодключаемся к серверу MariaDB с использованием SSL в HeidiSQL
Укажем путь к файлам с сертификатами и ключами как указано на картинках:
Проверяем использование SSL сервером MariaDB
В HeidiSQL выполним запросы:
SHOW STATUS LIKE 'Ssl_version';Ssl_version TLSv1.2SHOW STATUS LIKE 'Ssl_cipher';Ssl_cipher ECDHE-RSA-AES256-GCM-SHA384Так же мы можем проверить соединения включив performance_schema, для этого на сервере MariaDB добавим файл:
echo -e '[mariadb]\nperformance_schema=ON' | sudo tee /etc/my.cnf.d/performance_schema.cnfПерезапустим службу:
sudo systemctl restart mysqldЗакроем HeidiSQL и откроем заново, подключимся к серверу.
Выполним запрос:
SELECT
t.THREAD_ID,
t.PROCESSLIST_USER,
t.PROCESSLIST_HOST,
t.CONNECTION_TYPE,
sbt.VARIABLE_VALUE AS cipher
FROM
performance_schema.threads t
LEFT JOIN
performance_schema.status_by_thread sbt
ON
(t.THREAD_ID = sbt.THREAD_ID AND sbt.VARIABLE_NAME = 'Ssl_cipher')
WHERE
t.PROCESSLIST_USER IS NOT NULL;Результат
+-----------+------------------+------------------+-----------------+-----------------------------+
| THREAD_ID | PROCESSLIST_USER | PROCESSLIST_HOST | CONNECTION_TYPE | cipher |
+-----------+------------------+------------------+-----------------+-----------------------------+
| 11 | root | 192.168.1.40 | SSL/TLS | ECDHE-RSA-AES256-GCM-SHA384 |
+-----------+------------------+------------------+-----------------+-----------------------------+Мы используем SSL!
Отключим использование performance_schema:
sudo rm /etc/my.cnf.d/performance_schema.cnfПерезапустим:
sudo systemctl restart mysqldЕсли мы снимем галочку с SSL в HeidiSQL то при попытке соединится получим ошибку:
/* Access denied for user 'root'@'192.168.1.40' (using password: YES) */Установка галочки снова позволит нам подключиться к серверу!
Заключение
Сегодня мы рассмотрели настройку защищенного подключения к удаленному серверу MariaDB с использованием HeidiSQL:
Выпустили сертификат для сервера;
Установили сертификат и ключи на сервер MariaDB;
Настроили MariaDB на использование сертификатов;
Выпустили сертификат для клиента;
Создали пользователя в MariaDB с возможностью подключения только по SSL;
Подключились к серверу с использованием SSL;
Проверили использование сервером SSL.
Добавить комментарий