linux:mysql:mysql_encrypted_connections
MariaDB/MySQL: настройка SSL
Документация
Создаём каталог для сертификатов
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 на сайте 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 |
Возможные значения 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.
linux/mysql/mysql_encrypted_connections.txt · Последнее изменение: 2023/05/22 23:17 — dx
Обсуждение