====== MariaDB/MySQL: настройка SSL ======
Документация
* [[https://dev.mysql.com/doc/refman/8.0/en/using-encrypted-connections.html|Configuring MySQL to Use Encrypted Connections]]
* [[https://mariadb.com/kb/en/securing-connections-for-client-and-server/|Securing Connections for Client and Server]]
Создаём каталог для сертификатов
mkdir -p /etc/mysql/certs
cd /etc/mysql/certs
===== CA =====
# Generate CA key and certificate
openssl genrsa 2048 > mysql-ca-key.pem
openssl req -new -x509 -nodes -days 3600 -key mysql-ca-key.pem -out mysql-ca-cert.pem
===== Сервер =====
# Generate/sign server key/certificate
openssl req -newkey rsa:2048 -days 3600 -nodes -keyout mysql-server-key.pem -out mysql-server-req.pem
openssl rsa -in mysql-server-key.pem -out mysql-server-key.pem
openssl x509 -req -in mysql-server-req.pem -days 3600 -CA mysql-ca-cert.pem -CAkey mysql-ca-key.pem -set_serial 01 -out mysql-server-cert.pem
===== Клиент ======
# Generate/sign client key/certificate
openssl req -newkey rsa:2048 -days 3600 -nodes -keyout mysql-client-key.pem -out mysql-client-req.pem
openssl rsa -in mysql-client-key.pem -out mysql-client-key.pem
openssl x509 -req -in mysql-client-req.pem -days 3600 -CA mysql-ca-cert.pem -CAkey mysql-ca-key.pem -set_serial 01 -out mysql-client-cert.pem
===== chown/chmod =====
# Permissions
chown -R mysql:mysql *.pem
chmod 600 mysql-ca-key.pem mysql-server-key.pem mysql-client-key.pem
===== my.cnf =====
Добавить в ''/etc/mysql/my.cnf''
[mysqld]
ssl-ca=/etc/mysql/certs/mysql-ca-cert.pem
ssl-cert=/etc/mysql/certs/mysql-server-cert.pem
ssl-key=/etc/mysql/certs/mysql-server-key.pem
require_secure_transport=ON
tls_version=TLSv1.3
[client]
ssl-ca=/etc/mysql/certs/mysql-ca-cert.pem
ssl-cert=/etc/mysql/certs/mysql-client-cert.pem
ssl-key=/etc/mysql/certs/mysql-client-key.pem
Немного про **require_secure_transport** и **tls_version** [[https://learn.microsoft.com/ru-ru/azure/mysql/flexible-server/how-to-connect-tls-ssl|на сайте Microsoft]]
^ Сценарий ^ Параметры сервера ^ Описание ^
| Отключение принудительного применения SSL | require_secure_transport = OFF | Если устаревшее приложение не поддерживает зашифрованные подключения к серверу MySQL, можно отключить принудительное применение зашифрованных соединений к гибкому серверу, установив require_secure_transport = OFF. |
| Применение SSL с TLS версии < 1.2 | require_secure_transport = ON и tls_version = TLS 1.0 или TLS 1.1 | Если устаревшее приложение поддерживает зашифрованные подключения, но требует tls версии < 1.2, вы можете включить зашифрованные подключения, но настроить гибкий сервер, чтобы разрешить подключения с версией TLS (1.0 или 1.1), поддерживаемой приложением. Поддерживается только для База данных Azure для MySQL — гибкий сервер версии 5.7 |
| Принудительное использование SSL с версией TLS = 1.2 (конфигурация по умолчанию) | require_secure_transport = ON и tls_version = TLS 1.2 | Это рекомендуемая и используемая по умолчанию конфигурация для гибкого сервера. |
| Применение SSL с TLS версии = 1.3 | require_secure_transport = ON и tls_version = TLS 1.3 | Это полезно и рекомендуется для разработки новых приложений. Поддерживается только для База данных Azure для MySQL — гибкий сервер версии 8.0 |
Возможные значения [[https://dev.mysql.com/doc/refman/8.0/en/connection-options.html#option_general_ssl-mode|ssl-mode]]: DISABLED, PREFERRED, REQUIRED, VERIFY_CA, VERIFY_IDENTITY.
===== Проверка =====
Проверка цепочки сертификатов
# Check chain
openssl verify -CAfile mysql-ca-cert.pem mysql-server-cert.pem mysql-client-cert.pem
Проверка переменных
mysql -u root -p
SHOW VARIABLES LIKE '%ssl%';
STATUS;
Проверка подключения
$ mysql -u rtfm -p -h 10.20.30.40 --ssl-mode=REQUIRED --ssl-ca=/etc/mysql/certs/mysql-ca-cert.pem
С флагом ''--ssl-mode=DISABLED''
$ mysql -u rtfm -p -h 10.20.30.40 --ssl-mode=DISABLED --ssl-ca=/etc/mysql/certs/mysql-ca-cert.pem
должна появится ошибка
ERROR 3159 (HY000): Connections using insecure transport are prohibited while --require_secure_transport=ON.
{{tag>mysql mariadb ssl linux}}