RTFM.WIKI

Ordnung muß sein. Ordnung über alles (18+)

Инструменты пользователя

Инструменты сайта


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