为MySQL生成SSL证书和密钥

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

点击量:514

发表评论

电子邮件地址不会被公开。 必填项已用*标注

5 + 16 =