Назад | Перейти на главную страницу

Невозможно настроить MySQL SSL: невозможно прочитать сертификат

Я хочу включить MySQL SSL. У меня есть все сертификаты и ключи /etc/ssl/private/myhost. Они также (успешно) используются Apache2.

У меня не запущены SELinux или AppArmor.

Я настроил my.cnf следующим образом

#ssl
ssl-ca=/etc/ssl/private/myhost/myhost.ca_bundle
ssl-cert=/etc/ssl/private/myhost/myhost.crt
ssl-key=/etc/ssl/private/myhost/myhost.key
ssl-cipher=DHE-RSA-AES256-SHA

Я установил разрешения, чтобы пользователи в ssl-private группа может читать файлы и добавлять все необходимые демоны (т.е. wwwrun, mysql, postfix) в эту группу. Разрешения выглядят следующим образом

myhost:/etc/ssl/private/myhost # l
total 32K
drwxr-xr-x 2 root ssl-private 4,0K lug 14 13:11 .
drwxrwx--- 4 root ssl-private 4,0K lug 14 12:32 ..
-rw-r--r-- 1 root ssl-private 1,5K mag 30  2000 AddTrustExternalCARoot.crt
-rw-r--r-- 1 root ssl-private 3,3K lug 14 13:11 myhost.ca_bundle
-rw-r--r-- 1 root ssl-private 2,1K lug 13 22:00 myhost.crt
-rw-r--r-- 1 root ssl-private 1,8K lug 14 12:41 myhost.csr
-rw-r----- 1 root ssl-private 3,2K lug 14 12:36 myhost.key
-rw-r--r-- 1 root ssl-private 1,8K feb 15 23:00 PositiveSSLCA2.crt

Я также скопировал и вставил путь к файлу сертификата из my.cnf в команду sudo -u mysql cat /etc/ssl/private/myhost/myhost.crt и он показал мой сертификат. Та же самая команда работала для ключа.

Но, наконец, когда я запускаю MySQL, я получаю следующую ошибку:

SSL error: Unable to get certificate from '/etc/ssl/private/myhost/myhost.crt'
120814 14:20:37 [Warning] Failed to setup SSL
120814 14:20:37 [Warning] SSL error: Unable to get certificate

Как я могу это исправить?

Проблема заключается во владении файлом. Я видел то же самое с dkimproxy и смогли решить для этого конкретного приложения.

Поскольку каталог сертификатов SSL принадлежит группе ssl-private и с тех пор mysqld-safe работает как mysql группа, Linux не позволит прочитать закрытый ключ. С помощью dkim я успешно принудительно запустил программу как другую группу, отредактировав сценарий инициализации.

Решение 1 (самое быстрое)

Сделайте копию каталога сертификатов / ключей и chown к mysql:mysql. Требует синхронизировать копии ключей при каждом обновлении. Идеально масштабируется по приложениям и количеству серверов (предположим, что тот же сертификат используется и другими приложениями, например, Postfix), как только вы обновляете сертификаты с помощью сценария или контрольного списка (так что вы не забудете скопировать сертификаты в определенный приложение)

Вариант 2

Спросите на superuser.com :) как делиться одними и теми же файлами между несколькими группами