Я хочу включить 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 я успешно принудительно запустил программу как другую группу, отредактировав сценарий инициализации.
Сделайте копию каталога сертификатов / ключей и chown
к mysql:mysql
. Требует синхронизировать копии ключей при каждом обновлении. Идеально масштабируется по приложениям и количеству серверов (предположим, что тот же сертификат используется и другими приложениями, например, Postfix), как только вы обновляете сертификаты с помощью сценария или контрольного списка (так что вы не забудете скопировать сертификаты в определенный приложение)
Спросите на superuser.com :) как делиться одними и теми же файлами между несколькими группами