如何编辑Amazon RDS的ssl_ca_file参数?配置TLS/SSL客户端证书认证
AWS RDS强制TLS/SSL+自定义CA客户端认证实现指南
一、先确认引擎支持情况
不是所有RDS引擎都支持自定义CA客户端认证,MySQL、PostgreSQL可以正常配置,SQL Server的逻辑不同,以下仅针对前两者分享实操步骤。
二、强制TLS/SSL(补充细节)
- 找到RDS实例关联的参数组,将
rds.force_ssl设为1,保存后重启实例即可生效。 - 验证方式:尝试不携带SSL参数连接,若直接被拒绝,说明强制SSL已生效。
三、自定义CA客户端认证核心操作
1. 上传自定义CA证书到AWS
RDS无法直接读取本地文件,需将你的CA根证书(PEM格式)上传至Secrets Manager,或加密的S3存储桶,严格配置访问权限,避免无关主体访问。
2. 通过启动脚本替换默认CA路径
/rdsdbdata/rds-metadata/ca-cert.pem是RDS自带的AWS CA证书路径,无法直接修改,需通过启动脚本绕开限制:
- 编写shell脚本,从Secrets Manager/S3拉取自定义CA证书,复制到数据库进程可访问的目录,并调整权限:
# 从Secrets Manager拉取自定义CA证书,替换为你的Secret ID aws secretsmanager get-secret-value --secret-id my-custom-root-ca --query SecretString --output text > /tmp/custom-ca.pem # 复制到MySQL可访问目录(PostgreSQL可改为/var/lib/pgsql/) cp /tmp/custom-ca.pem /var/lib/mysql/custom-ca.pem # 修改权限让数据库进程可读 chown mysql:mysql /var/lib/mysql/custom-ca.pem - 将脚本上传至S3,给RDS实例添加选项组,选择
Custom Scripts选项并指定S3脚本路径,让RDS启动时自动执行脚本,将自定义CA证书部署到正确位置。 - 修改参数组:将
ssl_ca_file设为自定义证书路径(如/var/lib/mysql/custom-ca.pem),同时设置:- MySQL:
require_x509=1,强制客户端必须提供由该CA签发的证书 - PostgreSQL:
require_secure_transport=ON,并通过自定义脚本调整pg_hba.conf添加hostssl ... cert规则,限制仅带合法客户端证书的连接
- MySQL:
3. 客户端连接验证
客户端连接时必须携带三个文件:自定义CA证书、由该CA签发的客户端证书、客户端私钥。以MySQL客户端为例:
mysql -h my-rds-instance.xxxxxx.us-east-1.rds.amazonaws.com -u myuser -p --ssl-ca=/local/path/to/custom-ca.pem --ssl-cert=/local/path/to/my-client-cert.pem --ssl-key=/local/path/to/my-client-key.pem
四、踩坑提醒
- 部分参数属于静态参数,修改后必须重启RDS,提前规划维护窗口,避免影响业务。
- 定期检查自定义CA证书有效期,过期前需重新上传证书并更新脚本,防止连接中断。
- 确保S3和Secrets Manager的权限配置正确,给RDS关联的IAM角色添加对应访问权限,避免脚本拉取证书失败。
内容的提问来源于stack exchange,提问作者data princess
相关产品推荐
相关产品推荐

