我想启用 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
我该如何修复它?
答案1
问题在于文件所有权。我也见过同样的情况dkimproxy
并且能够解决该特定应用程序的问题。
由于 SSL 证书目录归组所有ssl-private
,并mysqld-safe
以组身份运行mysql
,因此 Linux 不允许读取私钥。使用 dkim,我通过编辑 init 脚本成功强制程序以其他组身份运行。
解决方案 1(最快)
将证书/密钥目录复制chown
到mysql:mysql
。每次更新时都需要同步密钥副本。只要使用脚本或检查表更新证书(这样您就不会忘记将证书复制到某个应用程序),就可以完美地跨应用程序和服务器数量进行扩展(假设其他应用程序也使用相同的证书,例如 Postfix)
选项 2
在 superuser.com 上询问:)如何在多个组之间共享相同的文件