为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 ca-cert.pem -CAkey ca-key.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 ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem

5、验证证书文件

openssl verify -CAfile ca-cert.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必须对这些文件具有读权限,在这个前提下,尽量使文件权限最小是比较合适的选择。

转载自菜包子博客 原文链接:http://caibaoz.com/blog/2013/08/13/generate_ssl_certificates_and_keys_for_mysql/

标签:mysql, SSL, 证书, 密钥

添加新评论