Bug 53196

Summary: Ошибка SSL error: Unable to get certificate в mariadb-server
Product: Sisyphus Reporter: Osmolovskaya Anastasia <osmolovskayaaa>
Component: mariadb-serverAssignee: Alexei Takaseev <taf>
Status: CLOSED NOTABUG QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: shaba, taf
Version: unstable   
Hardware: x86_64   
OS: Linux   

Description Osmolovskaya Anastasia 2025-02-21 17:05:50 MSK
Версия пакета: 
php8.4-mysqlnd-8.4.4-alt1.x86_64
php8.4-mysqlnd-mysqli-8.4.4-alt1.1.x86_64
libmysqlclient21-8.0.41-alt1.x86_64
mariadb-server-11.4.5-alt1.x86_64
mariadb-client-11.4.5-alt1.x86_64

Тестовые стенды: 
Alt Workstation K 11.0 x86-64 (обновленный до Sisyphus)
Alt Workstation 11.0 x86-64 (обновленный до Sisyphus)
Alt Education/Education-kde 11.0 x86-64 (обновленный до Sisyphus)
Alt Server 11.0 x86-64 (обновленный до Sisyphus)

Шаги воспроизведения:
1) Установить пакеты:
# apt-get install -y mariadb-server mariadb-client php8.4 php8.4-mysqlnd php8.4-mysqlnd-mysqli
# control mysqld-chroot disabled

2) Настроить сертификаты: 
# mkdir /etc/pki/tls/certs/mysql/
# cd /etc/pki/tls/certs/mysql/
# openssl req -x509 -newkey rsa:1024 -keyout server-key-enc.pem -out server-cert.pem -subj '/CN=localhost' -passout pass:123 -days 999
# openssl rsa -in server-key-enc.pem -out server-key.pem -passin pass:123 -passout pass:
# openssl req -x509 -newkey rsa:1024 -keyout client-key-enc.pem -out client-cert.pem -subj '/CN=client' -passout pass:123 -days 999
# openssl rsa -in client-key-enc.pem -out client-key.pem -passin pass:123 -passout pass:
# cat {server,client}-cert.pem > ca-cert.pem
# openssl verify -CAfile ca-cert.pem ./*-cert.pem
# chown -R mysql:mysql /etc/pki/tls/certs/mysql
3) Создать файл:
# cat > /etc/my.cnf.d/tests-mysqlnd.cnf << EOF
[server]
ssl-key=/etc/pki/tls/certs/mysql/server-key.pem
ssl-cert=/etc/pki/tls/certs/mysql/server-cert.pem

[client]
ssl-key=/etc/pki/tls/certs/mysql/client-key.pem
ssl-cert=/etc/pki/tls/certs/mysql/client-cert.pem
ssl-verify-server-cert=1

[client-server]
ssl-ca=/etc/pki/tls/certs/mysql/ca-cert.pem
ssl=1
EOF

4) Запустить службу mysqld: 
# systemctl enable --now mysqld.service && sleep 5; systemctl status mysqld.service

Ожидаемый результат: успешный запуск службы
Реальный результат: ошибка SSL error: Unable to get certificate

Дополнительно: аналогичные шаги для MySQL-server не приводят к ошибке.
Comment 1 Alexei Takaseev 2025-02-22 08:34:41 MSK
Начиная с версии 11.4 для работы SSL никаких дополнительных настроек производить не нужно, все операции по генерации сертификатов и ключей процесс mysqld производит самостоятельно при запуске и хранит их в памяти ( https://mariadb.com/kb/en/securing-connections-for-client-and-server/ ).

Для проверки работоспособности достаточно при подключении к субд запускать утилиту mariadb с ключем ssl
Comment 2 Alexei Takaseev 2025-02-22 08:47:14 MSK
И замечание к методике тестирования. Если задать размер ключа не 1024, как в примере, а, к примеру, 4096, то тогда все отрабатывает успешно. Предлагаю внести изменение в методику тестирования, увеличив размер ключе до 4096.
Comment 3 Alexei Takaseev 2025-02-22 08:50:04 MSK
И так же привожу конфиг, учитывающий синтаксис MariaDB:

[mariadb]
ssl-key=/etc/pki/tls/certs/mysql/server-key.pem
ssl-cert=/etc/pki/tls/certs/mysql/server-cert.pem
ssl-ca=/etc/pki/tls/certs/mysql/ca-cert.pem

[client-mariadb]
ssl-key=/etc/pki/tls/certs/mysql/client-key.pem
ssl-cert=/etc/pki/tls/certs/mysql/client-cert.pem
ssl-ca=/etc/pki/tls/certs/mysql/ca-cert.pem
ssl-verify-server-cert=1