Mysql Создание сертификатов и ключей SSL/TLS и RSA

Mysql Создание сертификатов и ключей SSL/TLS и RSA

Коллеги всем привет.

В прошлой статье мы говорили о том как настраивать зашифрованных соединений с базой данных Mysql с помощью сертификата SSL/TLS. Сегодня будем говорить о том как создавать сертификаты SSL/TLS и как их применять на базе данных без перезагрузки самой базы данных.

 

Предыдущая статья: Настройка SSL/TLS на MySQL. Использования зашифрованного соединения.

Версию СУБД я использую: 8.0.29

Содержимое статьи:

  1. Срок действия сертификата SSL/TLS.
  2. Создать сертификат SSL/TLS.
  3. Применяем новый сертификат.
  4. Проверка.
  5. Старые сессии.
  6. Итоги.

 

1. Срок действия сертификата SSL/TLS.

У всех сертификатов SSL/TLS есть свой срок действия. После того как срок действия заканчивается то при следующем подключении к базе данных возникнут проблемы с доступом или вообще база данных вас не пропустит. Чтобы посмотреть когда у вас заканчивается срок действия сертификата есть два способа.

 

Первый способ просмотра это через системную базу данных performance_schema и обратится до таблицы tls_channel_status.

mysql> select * from performance_schema.tls_channel_status WHERE CHANNEL = 'mysql_main';

mysql_create_ssl

Нас интересует два поля:

  • Ssl_server_not_after - Время окончания срока действия сертификата.
  • Ssl_server_not_before - Время когда был создан сертификат.

 

Второй вариант это обратится до системной переменной Ssl_server_not.

mysql> SHOW STATUS LIKE 'Ssl_server_not%';

mysql_create_ssl

Результат будет один и тот же. Можете использовать любой из вариантов который вам понравится.


 

2. Создать сертификат SSL/TLS.

За создания нового сертификата в Mysql отвечает утилита mysql_ssl_rsa_setup. Но создавать сертификат нужно в отдельной директории, а то если вы будете создавать сертификат в той же директории где у вас уже лежат старые сертификаты то mysql_ssl_rsa_setup ничего вам не создаст, а просто завершит свою роботу и даже ошибки не покажет.

 

2.1. Создаем директорию для сертификата.

$. mkdir -p /app/mysql/safety/09_06_2022

 

2.2. Создаем новый сертификат.

$. mysql_ssl_rsa_setup --datadir=/app/mysql/safety/09_06_2022 --verbose

mysql_create_ssl

После выполнения команды в нашей новой директории должны появится сертификаты.

 

2.3. Назначим владельца директории пользователя и группу mysql.

$. chown -R mysql:mysql /app/mysql/safety/09_06_2022


 

3. Применяем новый сертификат.

Осталась проблема в том как нам теперь применить наш созданный сертификат.

Есть конечно простой вариант просто прописать новый путь до сертификатов в конфигурационном файле и перезапустить базу данных, но если у нас постоянно нагруженная база данных и очень много клиентов то перезапускать базу данных как-то не очень хочется.

Решения есть!

После того как вы создали ваш сертификат вам нужно выполнить несколько действий:

 

3.1. Поменять путь к файлу сертификата центра сертификации.

mysql> SET GLOBAL ssl_ca = '/app/mysql/safety/09_06_2022/ca.pem';

mysql_create_ssl

 

3.2. Поменять путь к файлу сертификата открытого ключа.

mysql> SET GLOBAL ssl_cert = '/app/mysql/safety/09_06_2022/server-cert.pem';

mysql_create_ssl

 

3.3. Поменять путь к файлу закрытого ключа.

mysql> SET GLOBAL ssl_key = '/app/mysql/safety/09_06_2022/server-key.pem';

mysql_create_ssl

 

3.4. Запустить команду, которая перечитает новые ключи и применит их.

mysql> ALTER INSTANCE RELOAD TLS;

mysql_create_ssl

 

3.5. Но и конечно же прописать новые пути к сертификатам в конфигурационном файле.

mysql_create_ssl


 

4. Проверка.

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

mysql> SHOW STATUS LIKE 'Ssl_server_not%';

mysql_create_ssl

Как видим у нас поменялись даты создания и дата конца действия сертификата.


 

5. Старые сессии.

Остался последний нюанс. Старые сессии которые остались в базе данных то они все еще будут использовать старый сертификат. Для того чтобы они использовали уже новый сертификат то нужно им перезайти в базу данных или сбросить сессии с помощью команд.

 

5.1. Найти сессии.

mysql> SHOW PROCESSLIST;

 

5.2. Сбросить сессию.

mysql> KILL session_id;


 

6. Итоги.

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


 

Всем спасибо, я надеюсь что вам моя статья хоть чем-то помогла.

ПОХОЖИЕ СТАТЬИ

MySQL - Генерация тестовых данных
MySQL - Генерация тестовых данных
MYSQL
Читать далее
MySQL / MariaDB Как получить id последней вставленной записи в таблице - LAST_INSERT_ID
MySQL / MariaDB Как получить id последней вставленной записи в таблице - LAST_INSERT_ID
MYSQL
Читать далее
MySQL / MariaDB Как преобразовать регистр символов - Функции UPPER и LOWER
MySQL / MariaDB Как преобразовать регистр символов - Функции UPPER и LOWER
MYSQL
Читать далее