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
Читати далі