NodeJS 中的 AWS RDS SSL 连接错误

Posted

技术标签:

【中文标题】NodeJS 中的 AWS RDS SSL 连接错误【英文标题】:Connection error in AWS RDS SSL in NodeJS 【发布时间】:2020-05-18 15:14:48 【问题描述】:

我正在尝试通过带有 SSL 的 Lambda NodeJS 12.x 连接到 RDS。但是我收到这些错误:

  Error: 4506652096:error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol:
  library: 'SSL routines',
  function: 'ssl_choose_client_version',
  reason: 'unsupported protocol',
  code: 'HANDSHAKE_SSL_ERROR' 

我是这样连接的:

const pool  = mysql.createPool(
  connectionLimit     : 10,
  host                : 'db.cqgcxllqwqnk.eu-central-1.rds.amazonaws.com',
  ssl                 : 
    ca                : fs.readFileSync(__dirname + '/rds-ca-2019-root.pem')
  ,
  user                : ‘xxxxx’,
  password            : ‘xxxxxx’,
  database            : ‘xxxxxx’,
  multipleStatements  : true
);

当我通过 MySql Workbench 连接证书时,一切正常。

你知道如何解决这个问题吗?

非常感谢!

【问题讨论】:

【参考方案1】:

问题与Mysql版本和TLS版本有关。该矩阵显示,对于 MySQL 5.6,仅支持 TLS 1.0。 Node.js 12 默认使用 TLS 1.2。

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_MySQL.html#MySQL.Concepts.SSLSupport

【讨论】:

【参考方案2】:

在连接之前执行此操作,因为它对文件的权限不足

sudo chmod 755 rds-combined-ca-bundle.pem   

警告:保留一个强密码,这个密码很容易被猜到

如果您仍然发现问题,请检查 IAM 对 lambda 的权限或检查 RDS 和 lambda 是否在同一个 VPC 中。

【讨论】:

那么这可能是vpc或iam问题

以上是关于NodeJS 中的 AWS RDS SSL 连接错误的主要内容,如果未能解决你的问题,请参考以下文章

如何连接nodejs sequelize aws rds mysql数据库和ec2实例

AWS Lambda NodeJS 连接到 RDS Postgres 数据库

aws rds 代理从 nodejs12.x 引发超时错误

AWS,为 RDS 轮换 SSL/TLS 证书

AWS RDS SSL - 每个 RDS 实例的 ssl 服务器证书是不是不同或相同?

如何修复AWS DMS到RDS的连接错误?