Вопрос или проблема
MariaDB 11.5.2 на Debian 12.
Я создал сертификаты для своего сервера, расположенные в /etc/acme
и с модом 644 (владелец root, группа mysql)
/etc/mysql/mariadb.conf.d $ cat 99-bsz.cnf
[mysqld]
bind-address = 0.0.0.0
ssl-ca = /etc/ssl/certs/sectigo-ca.pem
ssl-cert = /etc/acme/hostname-fullchain.pem
ssl-key = /etc/acme/hostname-key.pem
#require-secure-transport = on # пробовал эту опцию, ничего не помогает
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
#innodb_buffer_pool_size = 8G
cat 50-client.cnf
[client-mariadb]
ssl
ssl-verify-server-cert
Но это не работает
$ mariadb -p -u root
Введите пароль:
ERROR 2026 (HY000): Ошибка TLS/SSL: Проверка имени хоста не удалась
Та же проблема с другим сообщением об ошибке
$ mariadb -p -h hostname.tld
Введите пароль:
ERROR 1045 (28000): Доступ запрещен для пользователя 'root'@'localhost' (используя пароль: ДА)
Когда я устанавливаю
cat 50-client.cnf
[client-mariadb]
ssl
ssl-verify-server-cert
Последнее соединение с именем хоста работает, но я не хочу, чтобы TLS был включен для локальных соединений. Как мне включить TLS только для удаленных соединений?
Ответ или решение
Чтобы решить проблему с подключением к MariaDB после включения TLS на локальном хосте, и обеспечить использование TLS только для удалённых подключений, выполните следующие шаги:
-
Настройка конфигурации сервера MariaDB: В файле конфигурации MariaDB (
/etc/mysql/mariadb.conf.d/99-bsz.cnf
) убедитесь, что вы установили параметры SSL следующим образом:[mysqld] bind-address = 0.0.0.0 ssl-ca = /etc/ssl/certs/sectigo-ca.pem ssl-cert = /etc/acme/hostname-fullchain.pem ssl-key = /etc/acme/hostname-key.pem require-secure-transport = on character-set-server = utf8mb4 collation-server = utf8mb4_general_ci
Обратите внимание, что
require-secure-transport
должен быть включен, чтобы принудительно использовать TLS для удалённых подключений. -
Настройка клиентской конфигурации: В файле клиентской конфигурации (
/etc/mysql/mariadb.conf.d/50-client.cnf
) не нужно устанавливатьssl-verify-server-cert
и включать SSL для локальных подключений. Измените файл на следующий:[client-mariadb] ssl
-
Создание отдельного файла конфигурации для локальных подключений (если вы хотите отключить использование TLS для локального хоста). Создайте файл, например,
/etc/mysql/mariadb.conf.d/51-local-client.cnf
, и добавьте следующее:[client] host = localhost
-
Проверка прав доступа для пользователя: Убедитесь, что у пользователя
root
есть необходимые права для подключения без использования TLS, если это локальное подключение. Это можно сделать, выполнив следующий запрос после входа в MariaDB:SELECT host, user FROM mysql.user WHERE user = 'root';
Проверьте, что у вас есть запись для
root
@localhost
. Если такой записи нет, создайте её:CREATE USER 'root'@'localhost' IDENTIFIED BY 'ваш_пароль'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;
-
Перезапуск MariaDB: После внесения всех изменений перезапустите службу MariaDB:
sudo systemctl restart mariadb
-
Проверка подключения: Теперь попробуйте подключиться к MariaDB с использованием команды:
mariadb -p -u root -h localhost
Подключение должно пройти без ошибок. Для удаленного подключения используйте следующую команду, указывая правильное имя хоста:
mariadb -p -u root -h hostname.tld
Теперь у вас должна быть настроенная MariaDB, где TLS включен для удалённых подключений, а локальные подключения осуществляются без использования TLS. Если после всех этих действий у вас всё ещё возникают проблемы, убедитесь, что сертификаты правильно созданы и расположены, и что ваша версия MariaDB правильно поддерживает включенные параметры, проверяя официальную документацию.