Aurora 默认强制 SSL 连接,需客户端声明支持 SSL 并显式配置根证书路径(如 rds-combined-ca-bundle.pem),否则报 SSL 错误;开发可跳过验证,生产必须校验。
连接 Aurora 时提示 SSL connection is required
这是 aurora 默认强制 ssl 的表现,不是配置错了,而是没传证书或没启用验证。mysql 客户端(如 mysql 命令、mysql2、pymysql)默认不校验服务端证书,但 aurora 要求客户端声明“我支持 ssl”,否则直接拒绝连接。
实操上分两步:一是让客户端用 SSL 协议握手,二是决定是否校验证书链。
-
--ssl-mode=REQUIRED(命令行)或ssl: true(Node.jsmysql2)能通过连接,但跳过证书验证 —— 适合开发环境快速测试 - 生产必须校验证书,得配合
--ssl-ca=/path/to/rds-combined-ca-bundle.pem或代码中传入ssl.ca字段 - Aurora Serverless v2 也强制 SSL,但 v1 某些旧集群可能未开启,别误以为“连得上=不用配”
Python pymysql 连接 Aurora 报 SSLError: [SSL: CERTIFICATE_VERIFY_FAILED]
这不是证书过期,而是客户端没告诉 OpenSSL 去哪找可信 CA 根证书。pymysql 默认不加载系统 CA,也不自动信任 RDS 的证书链。
正确做法是显式传入 RDS 提供的根证书文件(从 AWS 官方地址 下载),并确保路径可读。
- 下载后保存为
rds-ca.pem,路径别用相对路径(比如./rds-ca.pem),推荐绝对路径如/etc/ssl/certs/rds-ca.pem - 连接参数里加:
ssl={'ca': '/etc/ssl/certs/rds-ca.pem'},不要只写ssl=True - 如果用 SQLAlchemy,得在 URL 后加查询参数:
?ssl_ca=%2Fetc%2Fssl%2Fcerts%2Frds-ca.pem(注意 URL 编码) - 别把证书内容直接塞进字符串里——pymysql 不支持 PEM 内容,只认文件路径
Node.js mysql2 连接 Aurora 验证失败,日志显示 self signed certificate in certificate chain
这说明客户端尝试验证了,但中间缺了一环:RDS 的证书由 Amazon RDS root CA 签发,而你的运行环境没加载这个 CA,或者你用了错误的证书包。
AWS 提供两个证书包:rds-ca-2019-root.pem(已停用)、rds-combined-ca-bundle.pem(当前有效)。后者包含全部历史根证书,兼容性更好。
- 务必用
rds-combined-ca-bundle.pem,别手抖选错文件 - Node.js 中传入方式:
ssl: { ca: fs.readFileSync('/path/to/rds-combined-ca-bundle.pem') } - 如果部署在 Lambda,把证书放
/tmp并确保fs.readFileSync能读 —— Lambda 的/var/task是只读的 - 别设
rejectUnauthorized: false来绕过,这等于关掉 TLS 安全边界
Java 应用连接 Aurora 时 Failed to initialize SSL context
Java 的 mysql-connector-java(8.0+)默认启用 SSL,但不会自动加载 RDS CA。它需要你把证书导入 JKS 或 PKCS12 格式的 truststore,或直接指定 PEM 文件(8.0.23+ 支持)。
最简路径是用 PEM(避免 keytool 导入出错):
- 确认驱动版本 ≥ 8.0.23,否则不识别
sslMode=VERIFY_IDENTITY和trustCertificateKeyStoreUrl - JDBC URL 加参数:
?sslMode=VERIFY_IDENTITY&trustCertificateKeyStoreUrl=file:/path/to/rds-combined-ca-bundle.pem - 如果仍报错,检查文件权限:Java 进程用户必须有读取权限,Kubernetes 中尤其容易因挂载方式导致不可读
- 别混用
useSSL=true(老参数,已废弃)和新参数,会冲突


















