Mysql Створення сертифікатів та ключів SSL/TLS та RSA
Колеги всім привіт.
У минулій статті ми говорили про те, як налаштовувати зашифровані з'єднання з базою даних Mysql за допомогою сертифіката SSL/TLS. Сьогодні говоритимемо про те, як створювати сертифікати SSL/TLS та як їх застосовувати на базі даних без перезавантаження самої бази даних.
Попередня стаття: Налаштування SSL/TLS на MySQL. Використання зашифрованого з'єднання.
Версію СУБД я використовую: 8.0.29
Вміст статті:
- Термін дії сертифіката SSL/TLS.
- Створити сертифікат SSL/TLS.
- Застосовуємо новий сертифікат.
- Перевірка.
- Старі сесії.
- Підсумки.
1. Термін дії сертифіката SSL/TLS.
Всі сертифікати SSL/TLS мають свій термін дії. Після того як термін дії закінчується то при наступному підключенні до бази даних виникнуть проблеми з доступом або взагалі база даних вас не пропустить. Щоб подивитися, коли у вас закінчується термін дії сертифіката, є два способи.
Перший спосіб перегляду це через системну базу даних performance_schema та звернеться до таблиці tls_channel_status.
mysql> select * from performance_schema.tls_channel_status WHERE CHANNEL = 'mysql_main';
Нас цікавлять два поля:
- Ssl_server_not_after - Час закінчення терміну дії сертифіката.
- Ssl_server_not_before - Час, коли було створено сертифікат.
Другий варіант це звернеться до системної змінної Ssl_server_not.
mysql> SHOW STATUS LIKE 'Ssl_server_not%';
Результат буде той самий. Можете використовувати будь-який варіант, який вам сподобається.
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
Після виконання команди у нашій новій директорії мають з'явитися сертифікати.
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';
3.2. Змінити шлях до файлу сертифіката відкритого ключа.
mysql> SET GLOBAL ssl_cert = '/app/mysql/safety/09_06_2022/server-cert.pem';
3.3. Змінити шлях до файлу закритого ключа.
mysql> SET GLOBAL ssl_key = '/app/mysql/safety/09_06_2022/server-key.pem';
3.4. Запустити команду, яка перечитає нові ключі та застосує їх.
mysql> ALTER INSTANCE RELOAD TLS;
3.5. Але, звичайно ж, прописати нові шляхи до сертифікатів у конфігураційному файлі.
4. Перевірка.
Після всього, що ми зробили вам потрібно перейти в базу даних і перевірити.
mysql> SHOW STATUS LIKE 'Ssl_server_not%';
Як бачимо у нас змінилися дати створення та дата кінця дії сертифікату.
5. Старі сесії.
Залишився останній нюанс. Старі сесії які залишилися в базі даних, то вони все ще будуть використовувати старий сертифікат. Для того, щоб вони використовували вже новий сертифікат, потрібно їм перезайти в базу даних або скинути сесії за допомогою команд.
5.1. Знайти сесії.
mysql> SHOW PROCESSLIST;
5.2. Скинути сесію.
mysql> KILL session_id;
6. Підсумки.
У підсумку колеги за ці дві статті ми навчилися як налаштовувати захищені з'єднання з базою даних, і створювати нові сертифікати та застосовувати їх без перезавантаження бази даних.
Всім дякую, я сподіваюся, що вам моя стаття хоч чимось допомогла.