====== 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}}