mysql5.7生成ssl证书
环境信息
mysql版本:5.7.44
操作系统版本:centos 7.9
openssl版本:1.0.2
前置准备
检查openssl服务状态
ssl密钥生成依赖openssl服务。
openssl version
创建ssl密钥生成目录
进入你的mysql数据目录,在数据目录下创建ssl密钥存放目录,例如 mysql_keys。
# 创建密钥目录
mkdir mysql_keys
# 进入密钥目录
cd mysql_keys
生成CA私钥及证书
CA私钥及证书的作用,主要是用于生成服务器端/客户端的数字证书.
生成CA私钥
生成RSA格式的无加密私钥。
openssl genrsa 2048 > ca-key.pem
【参数说明】
- genrsa:OpenSSL子命令,用于生成RSA私钥。
- 2048:表示生成的RSA私钥的位数,2048位的RSA私钥目前被认为是安全的。
生成CA证书
该证书可以用于SSL/TLS服务器的身份验证,或者用于创建其他的证书。
openssl req -new -x509 -nodes -days 3650 -key ca-key.pem -out ca-cert.pem
【参数说明】
- req:OpenSSL子命令,用于处理证书签名请求(CSR)。
- -new:生成一个新的证书签名请求。
- -x509:生成一个自签名的X.509证书,而不是一个证书签名请求(X.509证书是一种公钥证书,广泛用于TLS和SSL协议)。
- -nodes:不对生成的私钥进行加密,如果没有这个选项,OpenSSL会要求提供一个密码来加密私钥。
- -days:设置证书的有效期,单位是天,以上表示证书的有效期是3650天。
- -key:指定用于签名新证书的私钥文件。
- -out:指定输出文件的名称。
【询问问题】
- Country Name (2 letter code) [XX]:证书所有者的国家代码,通常是两个字母的ISO国家代码,例如中国的代码是"CN"。
- State or Province Name (full name) []:证书所有者所在的州或省份的全名。
- Locality Name (eg, city) [Default City]:证书所有者所在的城市或地区名称。
- Organization Name (eg, company) [Default Company Ltd]:证书所有者的组织或公司名称。
- Organizational Unit Name (eg, section) []:证书所有者的组织单位或部门名称。
- Common Name (eg, your name or your server's hostname) []:证书所有者的通用名称,对于服务器证书,这通常是服务器的完全限定域名(FQDN)。
- Email Address []:证书所有者的电子邮件地址。
【说明】生成证书过程中会询问一些问题,主要用来标识证书的所有者,如果不需要就直接回车即可(如果为公网使用则要添加区分标识)或直接使用 -subj "/" 参数跳过。
创建服务端的私钥,请求及证书
生成服务端私钥
openssl genrsa 2048 > server-key.pem
生成服务端证书签名请求
服务器端的证书请求文件,用于生成服务器端的数字证书。
openssl req -new -days 3650 -nodes -key server-key.pem -out server-req.pem
【注意】生成过程询问信息时,服务端证书的Common Name字段的值设置为mysql数据库的ip,或加入参数 -subj "/CN=your mysql ip"。
生成服务端证书
服务器端的数字证书。
openssl x509 -req -in server-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
【参数说明】
- x509:OpenSSL子命令,用于处理X.509证书,X.509证书是一种公钥证书,广泛用于TLS和SSL协议。
- -req:表示openssl期望输入的是一个证书签名请求,即CSR。
- -in:用于指定输入文件,这里表示期望的CSR位于 server-req.pem 文件中。
- -CA:指定CA(证书颁发机构)的公钥证书。
- -CAkey:指定CA的私钥文件,两者结合使用来签发新的证书。
- -set_serial:表示设置证书的序列号为01。
创建客户端的私钥,请求及证书
生成客户端私钥
openssl genrsa 2048 > client-key.pem
生成客户端证书签名请求
客户端的证书请求文件, 用于生成客户端的数字证书。
openssl req -new -days 3650 -nodes -key client-key.pem -out client-req.pem
【注意】生成过程询问信息时,客户端证书的Common Name字段的值设置为连接mysql使用的用户名,,或加入参数 -subj "/CN=your login username"。
生成客户端证书
客户端的数字证书。
openssl x509 -req -in client-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
校验证书
校验输出结果都是OK表示校验通过。
openssl verify -CAfile ca-cert.pem server-cert.pem client-cert.pem
【注意】校验出现 "error 18 at 0 depth lookup:self signed certificate" 提示时,可重新生成证书处理:
- 根证书的Common Name字段的值置空;
- 服务端证书的Common Name字段的值设置为mysql数据库的ip;
- 客户端证书的Common Name字段的值设置为连接mysql使用的用户名;
虽然出现error提示,可以视为一个信息性提示,最后的OK表示证书在结构上还是有效的。
启用ssl配置
编辑配置文件
编辑 my.cnf(一般在/etc目录下),加入如下配置内容
ssl-ca=/mysql实际数据目录/mysql_kyes/ca-cert.pem
ssl-cert=/mysql实际数据目录/mysql_kyes/server-cert.pem
ssl-key=/mysql实际数据目录/mysql_kyes/server-key.pem
【注意】具体配置时以实际配置文件所在目录为准。
重启数据库服务
systemctl restart mysqld
检查启用情况
检查结果显示 YES 即表示启用成功。
mysql -uroot -p -e "show variables like '%have_ssl%'"
至此,SSL配置启用完毕。

浙公网安备 33010602011771号