Не удается подключиться к MariaDB после включения TLS на локальном хосте

Вопрос или проблема

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 только для удалённых подключений, выполните следующие шаги:

  1. Настройка конфигурации сервера 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 для удалённых подключений.

  2. Настройка клиентской конфигурации: В файле клиентской конфигурации (/etc/mysql/mariadb.conf.d/50-client.cnf) не нужно устанавливать ssl-verify-server-cert и включать SSL для локальных подключений. Измените файл на следующий:

    [client-mariadb]
    
    ssl
  3. Создание отдельного файла конфигурации для локальных подключений (если вы хотите отключить использование TLS для локального хоста). Создайте файл, например, /etc/mysql/mariadb.conf.d/51-local-client.cnf, и добавьте следующее:

    [client]
    
    host = localhost
  4. Проверка прав доступа для пользователя: Убедитесь, что у пользователя 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;
  5. Перезапуск MariaDB: После внесения всех изменений перезапустите службу MariaDB:

    sudo systemctl restart mariadb
  6. Проверка подключения: Теперь попробуйте подключиться к MariaDB с использованием команды:

    mariadb -p -u root -h localhost

    Подключение должно пройти без ошибок. Для удаленного подключения используйте следующую команду, указывая правильное имя хоста:

    mariadb -p -u root -h hostname.tld

Теперь у вас должна быть настроенная MariaDB, где TLS включен для удалённых подключений, а локальные подключения осуществляются без использования TLS. Если после всех этих действий у вас всё ещё возникают проблемы, убедитесь, что сертификаты правильно созданы и расположены, и что ваша версия MariaDB правильно поддерживает включенные параметры, проверяя официальную документацию.

Оцените материал
Добавить комментарий

Капча загружается...