Налаштування SSL/TLS на MySQL. Використання зашифрованого з'єднання. Частина 1

Налаштування SSL/TLS на MySQL. Використання зашифрованого з'єднання. Частина 1

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

У сьогоднішній статті ми поговоримо про те, як зробити так, щоб наше з'єднання з базою даних Mysql було надійним. При незашифрованому з'єднанні між клієнтом і сервером є  , що надсилаються або одержуються між клієнтом і сервером. MySQL підтримує зашифровані з'єднання між клієнтами та сервером за допомогою протоколу TLS (Transport Layer Security).

 

Вміст статті:

  1. Перевірте, що SSL увімкнено.
  2. Перевірка підтримуваних протоколів TLS.
  3. SSL стандартний сертифікат.
  4. Опис ключів.
  5. Змусити користувачів підключатися зашифрованим каналом.
  6. Авторизація SSL сертифіката.
  7. Як дізнатися, що я підключився зашифрованим каналом.
  8. Підсумки.

 

1. Перевірте, що SSL увімкнено.

Перш за все нам потрібно перевірити чи увімкнено SSL на базі даних. Для перевірки скористаємося командою:

mysql> SHOW VARIABLES LIKE '%have_%';

mysql_enable_ssl

Змінні які відповідають за включення ssl на базі даних називаються:

  • have_openssl
  • have_ssl

Якщо значення YES увімкнено. За замовчуванням при установці СУБД вже SSL увімкнено.


 

 2. Перевірка підтримуваних протоколів TLS.

СУБД Mysql може підтримувати безліч протоколів шифрування. Наприклад: TLSv1,TLSv1.1,TLSv1.2,TLSv1.3. Версія протоколу шифрування буде залежати від того, яка версія пакета openssl встановлена ​​в системі. Версії протоколів TLSv1 і TLSv1.1 вважаються застарілими і не надійними, і в останніх версіях баз даних вони будуть видалені. Щоб була підтримка сучасних протоколів шифрування, необхідно, щоб у вас пакет openssl був встановлений не нижчу версії openssl 1.1.1.

Щоб перевірити які версії протоколу шифрування на даний момент підтримує моя СУБД скористаюся командою:

mysql> SHOW VARIABLES LIKE 'tls_version';

mysql_enable_ssl

Як бачимо моя СУБД версії 8.0.29 підтримує протоколи шифрування TLSv1.2,TLSv1.3

 

Можна явно вказати СУБД яку версію протоколу шифрування потрібно використовувати, для цього потрібно до конфігураційного файлу додати параметр:

[mysqld]
tls_version=TLSv1.2,TLSv1.3


 

3. SSL сертифікат за промовчанням.

Коли ви тільки встановлюєте СУБД на сервер, то сама СУБД вже самостійно створить перший сертифікат і покладе його в директорію де у вас лежать всі файли бази даних (datadir).

mysql_enable_ssl

 

Можна ще перевірити через консоль бази даних як називаються ваші ключі.

mysql> SHOW VARIABLES LIKE '%ssl%';

mysql_enable_ssl


 

4. Опис ключів.

  • ssl_ca - Шлях до файлу сертифіката центру сертифікації.
  • ssl_cert - Шлях до файлу сертифіката відкритого ключа.
  • ssl_key - Шлях до файлу закритого ключа.

До речі відкритий ключ можна комусь передати, щоб у людини була можливість підключатися з клієнтських додатків до бази даних.


 

5. Змусити користувачів підключатися зашифрованим каналом.

Я впевнений на 100% що ніхто з вас не знав, що при з'єднанні з базою даних спочатку СУБД намагається з'єднатися з клієнтом по зашифрованому каналу, а якщо не виходить підключитися, то вже йде підключення по звичайному каналу без шифрування. Так щоб змусити клієнтів підключатися завжди зашифрованим каналом існує системна змінна під назвою&rbr;require_secure_transport. Давайте додамо її до конфігураційного файлу.

[mysqld]
require_secure_transport = ON

Тепер потрібно створити обліковий запис, в якому буде можливість підключатися тільки зашифрованим з'єднанням.

mysql> CREATE USER 'test_ssl'@'localhost' IDENTIFIED BY 'Jkjd#8sDF34' REQUIRE X509;

Якщо параметр REQUIRE X509 і вказує що при авторизації в базу даних вимагати зашифроване з'єднання та використання дійсного сертифіката X.509.

І тепер коли користувач просто намагатиметься зайти в базу, то він отримає помилку ERROR 1045 (28000).

Access denied for user 'test_ssl'@'localhost' (using password: YES)


 

6. Авторизація по SSL сертифікату.

Завжди коли ми підключаємося до бази даних ми використовуємо команду mysql -u username -p після водимо пароль від облікового запису і все, то тепер потрібно вказувати більше параметрів.

$. mysql -u test_ssl -p --ssl-ca=/app/mysql/data/ca.pem --ssl-cert=/app/mysql/data/server-cert.pem --ssl-key=/app/mysql /data/server-key.pem

Опис ключів дивіться у 4 розділі.

Можна обійтися без цих параметрів при підключенні до бази даних. Для цього нам потрібно вказати всі параметри ключів шифрування в конфігураційний файл.

[mysqld]
ssl_ca=/app/mysql/data/ca.pem
ssl_cert=/app/mysql/data/server-cert.pem
ssl_key=/app/mysql/data/server-key.pem
require_secure_transport=ON

[client]
ssl_ca=/app/mysql/data/ca.pem
ssl_cert=/app/mysql/data/server-cert.pem
ssl_key=/app/mysql/data/server-key.pem

mysql_enable_ssl


 

7. Як дізнатися, що я підключився зашифрованим каналом.

У вас є два варіанти перевірок того, що ви дійсно підключилися зашифрованим каналом.

Перший це коли ви тільки підключилися до бази даних і у вас з'явиться повідомлення привітання.

mysql_enable_ssl

 

Другий варіант це в тій же сесії виконати запит:

mysql> SHOW SESSION STATUS LIKE 'Ssl_cipher_list'\G;

або

mysql> SHOW SESSION STATUS LIKE 'Ssl_cipher';

mysql_enable_ssl

Якщо значення змінної не порожнє, це означає, що ви підключилися по зашифрованому каналу.


 

8. Підсумки.

У підсумку колеги ми сьогодні розглянули, як налаштувати захищене підключення до бази даних на основі SSL сертифікатів. У наступній статті на цю тему я вам розповім, як створювати нові сертифікати і як дізнатися, коли термін дії сертифіката закінчується.


 

Всім дякую, я сподіваюся, що вам моя стаття хоч чимось допомогла.

СХОЖІ СТАТТІ

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