Однонаправленный TLS в сертификате MariaDB не проходит проверку.

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

У меня установлена MariaDB 10.11 на RedHat 8.10. Я активировал One-Way TLS на сервере для теста. Я использовал следующий учебник:

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

  • Установите путь к X509 сертификату сервера, установив системную переменную ssl_cert.
  • Установите путь к закрытому ключу сервера, установив системную переменную ssl_key.
  • Если вы не используете сертификат, который был подписан доверенным центром сертификации (CA), вам нужно установить путь к цепочке сертификатов центров сертификации, которая может проверить сертификат сервера, установив либо системную переменную ssl_ca, либо ssl_capath.
  • Если вы хотите ограничить сервер определенными шифрами, то вам также нужно установить системную переменную ssl_cipher.

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

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 и перезапустил службу MariaDB.

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 

Затем я создал пользователя с опцией “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, пользователь может подключиться к базе данных. Но без этой опции пользователь не проверяет сертификат.

Неправильный путь к файлу CA?

Конфигурация сервера имеет /etc/my.cnf.d/tls/ca-cert.pem для корневого сертификата, что соответствует тому, как вы создали файлы, но в конфигурации клиента имеется /etc/my.cnf.d/certificates/ca.pem. Это может быть ошибкой в вопросе, но если нет, это объясняет, почему клиент MariaDB не смог прочитать файл. Попробуйте:

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

Недостаточные разрешения на файлы?

Проверьте разрешения на файлы. Клиент должен иметь возможность прочитать сертификат ca-cert.pem, но не должен иметь возможность прочитать секретный ключ ca-key.pem. Под тем же пользователем, под которым вы запускаете mariadb, вы можете просто попробовать прочитать файлы или перечислить разрешения с помощью ls.

cat /etc/my.cnf.d/tls/ca-cert.pem
cat /etc/my.cnf.d/tls/ca-key.pem
ls -l /etc/my.cnf.d/tls

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

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

Теория

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

  • Сертификат сервера (server-cert.pem): он удостоверяет личность сервера.
  • Закрытый ключ сервера (server-key.pem): используется для расшифровки данных, зашифрованных с помощью открытого ключа.
  • Сертификат доверенного центра сертификации (CA) (ca-cert.pem): удостоверяет подлинность серверного сертификата.

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

Пример

Ваш текущий подход к настройке состоит из нескольких этапов, начиная с генерации ключей и сертификатов:

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
chown -Rv mysql:root /etc/my.cnf.d/tls/

В конфигурационном файле сервера server.cnf вы добавили параметры SSL:

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 

На клиентской стороне вы проходите аутентификацию следующим образом:

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

Существует несколько возможных причин, почему TLS-соединение не удается установить:

  1. Путь к CA-сертификату: Вы упомянули различия в пути к CA-сертификату между серверной и клиентской конфигурацией. Убедитесь, что путь в клиентском файле указывает на правильный и доступный сертификат:

    ssl_ca = /etc/my.cnf.d/tls/ca-cert.pem
    ssl-verify-server-cert
  2. Разрешения файлов: Проверьте права доступа на файлы сертификатов и ключей. Сертификаты должны быть доступными для чтения клиентом, тогда как закрытый ключ не должен быть доступен. Используйте команды:

    cat /etc/my.cnf.d/tls/ca-cert.pem
    cat /etc/my.cnf.d/tls/ca-key.pem
    ls -l /etc/my.cnf.d/tls
  3. Формат сертификата: Убедитесь, что сертификаты корректны и соответствуют стандартам, используемым OpenSSL. Сертификат может быть поврежден или с неправильными атрибутами, что также может вызвать проблемы валидации.

  4. Серийный номер и срок действия: Проверьте, что серийный номер сертификата уникален и что срок его действия не истек.

  5. Корректность CA сертификатов: Иногда необходимо удостовериться, что CA-сертификат, используемый для подписи, корректен и присутствует в системных хранилищах доверенных корневых сертификатов, если используется сторонний CA.

Применение

Чтобы устранить проблему и правильно настроить TLS, следуйте этим шагам:

  • Перепроверьте пути ко всем файлам SSL как на сервере, так и на клиенте.
  • Убедитесь в доступности сертификатов для MariaDB и исправности файлов.
  • Пересоздайте сертификаты, если есть сомнения в их корректности.
  • Используйте утилиты для проверки сертификатов и закрытых ключей, чтобы убедиться в их валидности. Например, командой openssl можно проверить сертификат:

    openssl x509 -in /etc/my.cnf.d/tls/server-cert.pem -text -noout

После выполнения всех проверок и исправлений повторите попытку соединения:

mariadb -u test_user -p

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

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

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