我为SSL设置了MySQL服务器v5.5.41,我试图远程连接它。我已经创建了SSL证书,密钥,创建了一个用户并授予了这样的权限:
GRANT SELECT ON mydb.* TO 'myuser'@'xxx.xxx.xxx.xxx' require x509;
我已更新服务器上的my.cnf
文件,如:
ssl-ca = /etc/mysql/certs/ca.pem
ssl-cert = /etc/mysql/certs/server-cert.pem
ssl-key = /etc/mysql/certs/server-key.pem
我对客户端pem文件(和ca.pem
)做了同样的事情,将它们添加到my.cnf(client
部分下)。我还更新了(Linux)/etc/apparmor.d/usr.sbin.mysqld
,因为我将我的pem文件放在我创建的新目录(certs
)中。
一切正常!除非我重复为本地开发机器创建客户端pem文件和用户/权限的过程。我完成了所有相同的工作,但是当我尝试连接时,我得到了:
错误1045(28000):拒绝用户访问' testuser' xxx.xxx.xxx.xxx' (使用密码:是)
我在mysql服务器上创建了testuser
并以与以前完全相同的方式授予了权限(通过查询数据库进行验证)。客户端pems和ca.pem在框中,并且cnf文件已更新。我重启了MySQL。我用来连接服务器的密码肯定正确。
我能想到的唯一不同的是,当我创建客户端证书时,我不知道要为Common Name添加什么。在另一种情况下,在它工作的地方,该机器是一个Web服务器,因此我使用的Common Name是域。对于我的开发机器,我只使用了通过运行hostname
命令获得的Common Name。如果这是问题,公共名称应该是什么?
答案 0 :(得分:0)
问题的原因是因为我不小心把这些行:
ssl-cert = /etc/mysql/certs/client-cert.pem
ssl-key = /etc/mysql/certs/client-key.pem
...在[mysqld_safe]
部分下的本地开发计算机上,而不是[client]
中的my.cnf
部分,所以这里没有固有的MySQL或SSL问题(尽管我没有'写下这个问题,我可能花了很长时间才发现这个问题。