本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
RDS MySQL在配置SSL链路加密时,不仅支持使用阿里云数据库提供的云端证书,还支持使用自定义证书。本文介绍通过自定义证书配置SSL链路加密功能的具体操作。
前提条件
- 已安装OpenSSL工具。 
- SSL加密功能要求RDS MySQL实例系列和版本如下: - 高可用系列:8.0、5.7、5.6 
- 集群系列:8.0、5.7 
- 基础系列:8.0、5.7 
 
- 强制SSL加密要求RDS MySQL实例版本如下: - 数据库大版本:8.0、5.7 
- 产品系列:基础系列、高可用系列和集群系列 
- 内核小版本大于等于20241130 
 
- 使用Linux系统时,通常已经预装了OpenSSL工具,无需另外安装。 
- 使用Windows系统时,需要获取OpenSSL软件包并安装。 
注意事项
- 开启SSL链路加密后,会造成CPU使用率上升、读写时延增长。 
- 开启SSL链路加密后,已有连接需要断开重连,加密才会生效。 
- 配置、更改自定义证书内容或关闭SSL链路加密,将会重启您的数据库实例,耗时3分钟左右,请在业务低峰期操作。 
- 开启强制SSL加密后,客户端或数据库代理连接RDS MySQL时,只能选择SSL加密连接,非加密连接会被拒绝。 
如何配置
步骤一:获取自定义证书
生成服务器证书私钥或自签名证书私钥时,请勿使用密码加密,否则将无法启用SSL链路加密。
以CentOS系统配置为例,执行如下步骤:
如果您的操作系统为Windows,操作步骤中的openssl命令与CentOS系统中的openssl命令配置相同,cp命令请替换为手动复制,vim命令请替换为手动编辑文件。
- 创建自签名证书(server-ca.crt)和自签名证书私钥(server-ca.key)。 - openssl req -new -x509 -days 365 -nodes -out server-ca.crt -keyout server-ca.key -subj "/CN=root-ca"
- 生成服务器证书请求文件(server.csr)和服务器证书私钥(server.key)。 - MySQL的自定义证书目前仅支持对一个连接地址进行保护。您可以根据需要选择配置生成服务器证书请求文件,请配置如下命令: - openssl req -new -nodes -text -out server.csr -keyout server.key -subj "/CN=rm-bpxxxxx.mysql.rds.aliyuncs.com"说明- rm-bpxxxxx.mysql.rds.aliyuncs.com仅用于举例,请修改为需要保护的链接地址,查看连接地址请参见查看和管理实例连接地址和端口。- 生成证书请求文件(server.csr)的过程中,会提示配置以下参数,请根据实际情况配置。 - 参数 - 说明 - 示例 - Country Name - ISO国家代码(两位字符) - CN - State or Province Name - 所在省份 - ZheJiang - Locality Name - 所在城市 - HangZhou - Organization Name - 公司名称 - Alibaba - Organizational Unit Name - 部门名称 - Aliyun - Common Name - 申请SSL证书的域名,在openssl.cnf文件中已配置,不需要输入 - - - Email Address - 不需要输入 - - - A challenge password - 不需要输入 - - - An optional company name - 不需要输入 - - 
- 生成服务器证书(server.crt)。 - 如果您需要保护连接地址,请配置如下命令。 - openssl x509 -req -in server.csr -text -days 365 -CA server-ca.crt -CAkey server-ca.key -CAcreateserial -out server.crt
 
完成以上步骤的配置后,执行ls命令,查看已生成的文件: 
# ls
server-ca.crt  server-ca.key  ca.srl  server.crt  server.csr  server.key关键文件解释如下:
- server.crt:服务器证书文件。 
- server.key:服务器私钥文件。 
- server-ca.crt:自签名证书。 
- server-ca.key:自签名证书私钥。 
步骤二:使用自定义证书开启SSL链路加密
配置自定义证书后,实例的运行状态将会变更为修改SSL中,该状态将持续三分钟,请等待实例状态变更为运行中后再进行后续操作。
- 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。 
- 进入页面。 
- 切换证书来源为使用自定义证书,单击未开通前的开关,填写服务器证书、服务器证书私钥,选择是否开启强制加密后,单击确定,完成配置。 - 参数 - 取值 - 服务器证书 - 此参数填写步骤一:获取自定义证书步骤中获取的server.crt文件内容。请填写-----BEGIN CERTIFICATE-----至-----END CERTIFICATE-----间的内容,包括BEGIN和END部分。 - 服务器证书私钥 - 此参数填写步骤一:获取自定义证书步骤中获取的server.key文件内容。请填写-----BEGIN PRIVATE KEY-----至-----END PRIVATE KEY-----间的内容,包括BEGIN和END部分。 - 是否开启强制加密 - 根据需要,选择开启或关闭。 - 仅MySQL 5.7版本且内核小版本大于等于20241130的实例支持强制开启SSL。 
- 开启强制SSL加密后,客户端或数据库代理连接RDS MySQL时,只能使用SSL加密连接,非加密连接会被拒绝。 
 
配置成功后,会显示如下图所示的信息:

步骤三:客户端连接数据库
RDS MySQL数据库支持通过SSL远程连接,更多信息,请参见SSL连接RDS MySQL数据库。
步骤四:(可选)更新证书
除MySQL 8.0外,其他版本更新证书会重启实例,请谨慎操作。
如果您需要更新证书,可以在SSL页面单击更新SSL按钮,填写新的服务器证书和私钥。

步骤五:(可选)关闭SSL链路加密
关闭SSL加密会重启实例,请谨慎操作。
如果您需要关闭SSL链路加密,可以在SSL页面单击已开通前的按钮。

常见问题
Q:自定义证书过期了怎么办?
A:RDS MySQL自定义证书的期限为用户所自定义,系统会根据证书有效期时间,在到期前发送过期提醒的通知,请收到通知后及时进行证书的有效期更新,避免业务受到影响。