Односторонний TLS в MariaDB не работает.

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

Я установил mariadb 10.11 на свой сервер RedHat 8.10. Я попытался активировать однонаправленный TLS на своем сервере для тестирования. Я использовал руководство с официального сайта mariadb:

https://mariadb.com/kb/en/securing-connections-for-client-and-server/

сначала я создал свой ключ и сертификат:

openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 365000 -key ca-key.pem -out ca-cert.pem
openssl req -newkey rsa:2048 -days 365000 -nodes -keyout server-key.pem -out server-req.pem
openssl rsa -in server-key.pem -out server-key.pem
openssl x509 -req -in server-req.pem -days 365000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pe
chown -Rv mysql:root /etc/my.cnf.d/tls/

затем я добавил конфигурацию ssl в файл server.cnf:

ssl-ca=/etc/my.cnf.d/tls/ca-cert.pem
ssl-cert=/etc/my.cnf.d/tls/server-cert.pem
ssl-key=/etc/my.cnf.d/tls/server-key.pem
require_secure_transport=ON 

и перезапустил службу mariadb.
Затем я создал пользователя с опцией “required ssl”.
и, следуя руководству, добавил эти строки в файл клиента:

ssl_ca = /etc/my.cnf.d/certificates/ca.pem
ssl-verify-server-cert

теперь, когда я пытаюсь подключиться к базе данных, я получаю ошибку:

mariadb -u test_user -p

ошибка:

ERROR 2026 (HY000): TLS/SSL error: Validation of SSL server certificate failed

ошибка в файле журнала:

[Warning] Aborted connection 55 to db: 'unconnected' user: 'unauthenticated' host: 'mon.example.com' (This connection closed normally without authentication)

*** когда я удаляю ssl-verify-server-cert из client.cnf, пользователь может подключиться к базе данных. Но без этой опции пользователь не использует сертификат.

Ответ или решение

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

Теория

Односторонний TLS (Transport Layer Security) в контексте MariaDB означает, что сервер предъявляет свой сертификат клиенту, который затем проверяет этот сертификат для создания защищенного соединения. Ваша ситуация типична для случаев, когда клиентская сторона требует верификации сертификата сервера, но по какой-то причине не может его верифицировать.

Основные компоненты TLS:

  1. CA-сертификат: Сертификат авторитетного центра сертификации, которым подписаны клиентские и серверные сертификаты.
  2. Серверный сертификат: Сертификат, который удостоверяет сервер и обеспечивает безопасность соединения.
  3. Закрытый ключ сервера: Приватный ключ, соответствующий серверному сертификату. Он используется для расшифровки данных, зашифрованных клиентом.

Для настройки одностороннего TLS обычно требуется:

  • Создать собственные сертификаты при помощи OpenSSL или воспользоваться сервисами CA.
  • Правильно разместить эти сертификаты и ключи в файловой системе сервера с корректными правами доступа.
  • Настроить server.cnf и client.cnf в соответствии с требованиями безопасности.

Пример

Рассмотрим процесс на примере вашей конфигурации.

  1. Генерация ключей и сертификатов

Вы уже генерировали необходимые ключи и сертификаты:

openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 365000 -key ca-key.pem -out ca-cert.pem
openssl req -newkey rsa:2048 -days 365000 -nodes -keyout server-key.pem -out server-req.pem
openssl rsa -in server-key.pem -out server-key.pem
openssl x509 -req -in server-req.pem -days 365000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
  1. Настройки сервера

Вы добавили соответствующие строки в server.cnf:

ssl-ca=/etc/my.cnf.d/tls/ca-cert.pem
ssl-cert=/etc/my.cnf.d/tls/server-cert.pem
ssl-key=/etc/my.cnf.d/tls/server-key.pem
require_secure_transport=ON
  1. Настройки клиента

Для требуемой верификации сертификата сервера это совершенно правильно:

ssl_ca = /etc/my.cnf.d/certificates/ca.pem
ssl-verify-server-cert

Проблема возникает при установлении соединения:

ERROR 2026 (HY000): TLS/SSL error: Validation of SSL server certificate failed

Применение

Рассмотрим возможные причины проблем и шаги для их устранения:

  1. Проблема с путями к сертификатам

Проверьте, что указанные в конфигурации пути к сертификатам и ключам действительно существуют и файлы доступны с нужными правами доступа.

  1. Убедитесь в соответствии CA-сертификата

Проверьте, соответствует ли клиентский CA-сертификат сертификату сервера. Это можно проверить командой OpenSSL:

openssl verify -CAfile /etc/my.cnf.d/certificates/ca.pem /etc/my.cnf.d/tls/server-cert.pem

Вы должны получить сообщение, что сертификат является действительным. Если это не так, возможно, проблема в самом сертификате или его цепочке.

  1. Инспекция сертификатов

Проверьте, какие поля имеются в серверном сертификате (CN, SAN и т.д.) и соответствует ли CN (или SAN) реальному имени хоста сервера:

openssl x509 -in /etc/my.cnf.d/tls/server-cert.pem -text -noout
  1. Правильный выбор Cipher Suites

Проверьте настройки используемых шифров с поддержкой TLS. Убедитесь, что в вашей системе и MariaDB поддерживаются те же алгоритмы, что и OpenSSL.

  1. Диагностика через логи

Проверьте журналы MariaDB на наличие дополнительных сообщений об ошибках, они могут дать больше информации о сбое:

tail -f /var/log/mariadb/mariadb.log

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

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

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