Вопрос или проблема
Я пытаюсь настроить 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
Применение
-
Проверка текущих возможностей MariaDB:
Убедитесь, что ваша версия MariaDB поддерживает OpenSSL. Это можно сделать, проверив документацию или настройки MariaDB на вашем сервере. При наличии поддержки OpenSSL, MariaDB должна принимать PKCS#8 формат. -
Настройка сертификатов:
Если ваш 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
- Переместите ваши сертификаты и ключи в защищенный каталог на вашем сервере, например
-
Проверка и перезагрузка:
После внесения изменений обязательно проверьте конфигурацию MariaDB на наличие ошибок. Рекомендуемая команда для тестирования —mysqld --ssl
, которая помогает убедиться в корректности SSL-конфигурации. После успешной проверки перезапустите MariaDB для применения изменений:sudo systemctl restart mariadb
-
Проверка соединения через SSL:
Убедитесь в успешности SSL подключений, выполнив соединение с базой данных с проверкой SSL. Например, используя CLI клиента MariaDB:mysql -u username -p --ssl-cert=/etc/mysql/ssl/cert.pem --ssl-key=/etc/mysql/ssl/privkey.pem
Убедитесь, что соединение проходит через SSL.
-
Отлаживание:
Если проблемы с подключением по-прежнему остаются, проверьте логи MariaDB и OpenSSL на наличие потенциальных ошибок или предупреждений.
Таким образом, следуя вышеуказанным шагам, можно настроить MariaDB с использованием сертификатов Let’s Encrypt, избегая при этом генерации самоподписанных сертификатов. Это решает проблему безопасности и упрощает развертывание SSL на сервере базы данных.