MySQL支持SSL通信,不过需要自行生成所需要的证书和密钥。
生成过程中请根据提示提供相应的信息。如果证书只是用来测试,一路回车即可;如果在实际环境中使用,尽量提供有意义的信息。如果某个信息要留空,可以输入英文句号(.)。请自行保存生成过程中所输入的证书密码。
1 准备工作
创建干净的环境:
$ rm -rf newcerts $ mkdir newcerts && cd newcerts
2 生成CA证书
需要注意,CA证书的Comman Name不能与服务器请求文件和客户端的请求文件的Comman Name相同,否则证书验证阶段会报类似“error 18 at 0 depth lookup:self signed certificate”的错误。命令如下:
$ openssl genrsa 2048 > cakey.pem $ openssl req -new -x509 -nodes -days 3600\ -key cakey.pem -out cacert.pem
3 生成服务器证书
生成服务器证书,移除密码,并对其签名。server-cert.pem是公钥,server-key.pem是私钥。
$ openssl req -newkey rsa:2048 -days 3600 -nodes\ -keyout server-key.pem -out server-req.pem $ openssl rsa -in server-key.pem -out server-key.pem $ openssl x509 -req -in server-req.pem -days 3600 -CA cacert.pem\ -CAkey cakey.pem -set_serial 01 -out server-cert.pem
4 生成客户端证书
生成客户端证书,移除密码,并对其签名。client-cert.pem是公钥,client-key.pem是私钥。
$ openssl req -newkey rsa:2048 -days 3600 -nodes\ -keyout client-key.pem -out client-req.pem $ openssl rsa -in client-key.pem -out client-key.pem $ openssl x509 -req -in client-req.pem -days 3600 -CA cacert.pem\ -CAkey cakey.pem -set_serial 01 -out client-cert.pem
5 验证证书文件
$ openssl verify -CAfile cacert.pem server-cert.pem client-cert.pem server-cert.pem: OK client-cert.pem: OK
6 补充说明
用到的文件有cacert.pem、client-cert.pem、client-key.pem、server-cert.pem、server-key.pem。其中cacert.pem服务器客户端都需要;以server打头的用于服务器,以client打头的用于客户端。
关于密钥文件的权限设置,暂时没找到合适的答案。由于用户mysql必须对这些文件具有读权限,在这个前提下,尽量使文件权限最小是比较合适的选择。
系统环境Debian 7。
7 参考文档
7.1 MySQL 5.5 Reference Manual。
Visits: 2496