Настроить MariaDB с SSL-сертификатом Let’s Encrypt

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

Я пытаюсь настроить SSL для нового экземпляра MariaDB. У меня есть сертификат от Let’s Encrypt, и я хотел бы использовать его, а не запрашивать новый сертификат или использовать самоподписанный.

Я знаю, что Let’s Encrypt использует PKCS#8, а MariaDB требует PKCS#1.

Когда я выполняю команду:

openssl rsa -in privkey.key -out privkey_converted.key -traditional

Я не получаю ключ RSA. Первая строка:

-----BEGIN EC PRIVATE KEY-----.

Я знаю, что Let’s Encrypt использует PKCS#8

Нет, программа Certbot использует PKCS#8. Удостоверяющий центр Let’s Encrypt вообще не видит закрытый ключ – он выпускает сертификат только на основе открытого ключа (который предоставляется в форме запроса на сертификат PKCS#10) – поэтому формат закрытого ключа полностью определяется клиентским ПО, с PKCS#12 (PFX), который довольно распространен на Windows, и PKCS#8, который является современным стандартом в остальном мире.

MariaDB требует PKCS#1.

Это уже давно не так в моем опыте. Если ваша MariaDB собрана с поддержкой OpenSSL (а не странного YaSSL, который использовался в старых пакетах Debian), она будет принимать закрытые ключи в формате PKCS#8, так как OpenSSL поддерживает этот формат уже давно.

На моих серверах я использую файлы ключей в формате PKCS#8 с (OpenSSL) MariaDB с 2019 года. (Хотя, признаюсь, на другой дистрибуции – даже Debian Bookworm начал собирать его с OpenSSL, так как несовместимости лицензий были решены с выпуском 3.0 версии последнего.)

Когда я запускаю ‘openssl rsa -in privkey.key -out privkey_converted.key -traditional’, я на самом деле не получаю ключ RSA. Первая строка ‘—–BEGIN EC PRIVATE KEY—–‘.

Потому что у вас изначально нет ключа RSA. Преобразование между PKCS#8 и PKCS#1 просто дает вам другую оболочку вокруг того же ключа – те же числа, перепакованные в немного другую структуру – но оно не может изменить основной тип ключа.

Так что если вы создали ключ ECDSA при запросе сертификата (что, как я полагаю, по умолчанию для Certbot в наши дни), то у вас есть ключ ECDSA – независимо от того, в каком формате он хранится – и BEGIN EC PRIVATE KEY действительно является правильным заголовком для таких ключей, когда они находятся в формате PEM/PKCS#1.

Если ваша версия MariaDB требует PKCS#1 и RSA, то вам придется получить новый сертификат, например, используя команду certbot renew --key-type rsa --cert-name example.com --force-renewal, чтобы сгенерировать RSA ключевую пару.

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

Конфигурация MariaDB с использованием SSL-сертификата Let’s Encrypt

Теория

Для защиты соединений с MariaDB, SSL-сертификаты играют ключевую роль, особенно при использовании Let’s Encrypt, популярного бесплатного сервиса для получения сертификатов. Let’s Encrypt использует сертификаты формата PKCS#8, в то время как в некоторых случаях MariaDB может требовать формат PKCS#1. Не так давно это считалось обязательным, но современные версии MariaDB, построенные с поддержкой OpenSSL, могут обрабатывать как PKCS#1, так и PKCS#8, что существенно упрощает интеграцию с Let’s Encrypt.

PKCS#8 — это формат, используемый для хранения приватных ключей, и он является более современным стандартом по сравнению с PKCS#1. Однако, если ваш MariaDB требует PKCS#1 и RSA ключи, вам может понадобиться пересоздание сертификата с использованием RSA, если текущий является ECDSA.

Пример

Ваша текущая ситуация такова: вы установили, что ключ, который у вас есть, — это ECDSA, о чем свидетельствует заголовок "—–BEGIN EC PRIVATE KEY—–". Если MariaDB требует RSA ключи, ваш существующий процесс вызова команды OpenSSL не изменит тип ключа — он просто перепакует его в другой формат, оставляя тип ключа неизменным. Это означает, что преобразование между PKCS#8 и PKCS#1 изменяет только упаковку ключа, но не его тип.

Если требуется RSA, вам нужно будет пересоздать ключ и сертификат, используя команду Certbot, такую как:

certbot renew --key-type rsa --cert-name example.com --force-renewal

Применение

  1. Проверка текущих возможностей MariaDB:
    Убедитесь, что ваша версия MariaDB поддерживает OpenSSL. Это можно сделать, проверив документацию или настройки MariaDB на вашем сервере. При наличии поддержки OpenSSL, MariaDB должна принимать PKCS#8 формат.

  2. Настройка сертификатов:
    Если ваш MariaDB может работать с исходными ключами PKCS#8, настройте MariaDB для использования данных сертификатов. Для этого вам нужно выполнить следующие шаги:

    • Переместите ваши сертификаты и ключи в защищенный каталог на вашем сервере, например /etc/mysql/ssl/.
    • Добавьте или измените следующие строки в вашем конфигурационном файле MariaDB (my.cnf):
      [mysqld]
      ssl-ca=/etc/mysql/ssl/fullchain.pem
      ssl-cert=/etc/mysql/ssl/cert.pem
      ssl-key=/etc/mysql/ssl/privkey.pem
  3. Проверка и перезагрузка:
    После внесения изменений обязательно проверьте конфигурацию MariaDB на наличие ошибок. Рекомендуемая команда для тестирования — mysqld --ssl, которая помогает убедиться в корректности SSL-конфигурации. После успешной проверки перезапустите MariaDB для применения изменений:

    sudo systemctl restart mariadb
  4. Проверка соединения через SSL:
    Убедитесь в успешности SSL подключений, выполнив соединение с базой данных с проверкой SSL. Например, используя CLI клиента MariaDB:

    mysql -u username -p --ssl-cert=/etc/mysql/ssl/cert.pem --ssl-key=/etc/mysql/ssl/privkey.pem

    Убедитесь, что соединение проходит через SSL.

  5. Отлаживание:
    Если проблемы с подключением по-прежнему остаются, проверьте логи MariaDB и OpenSSL на наличие потенциальных ошибок или предупреждений.

Таким образом, следуя вышеуказанным шагам, можно настроить MariaDB с использованием сертификатов Let’s Encrypt, избегая при этом генерации самоподписанных сертификатов. Это решает проблему безопасности и упрощает развертывание SSL на сервере базы данных.

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

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