繁体   English   中英

通过Node.js与RDS MySQL / Aurora无服务器群集的SSL连接失败

[英]SSL connections to RDS MySQL/Aurora serverless cluster fail with Node.js

我已经将Node.js LTS与RDS MySQL数据库一起使用了一段时间。 我最近启动了一个RDS无服务器Aurora MySQL 5.6集群。 与其他RDS数据库不同,我无法使用Node mysql或mysql2适配器让Node.js通过SSL连接到新的无服务器集群。

从具有单个Node.js应用程序的单个Ubuntu实例中:

我可以使用SSL成功将Node应用程序连接到任何较旧的RDS数据库(MySQL 5.6.40):

// works with other RDS databases:
const fs = require('fs');
const mysql = require('mysql2');
const config = require('../config');

var connectionArgs = {
  host: config.old_rds_host,
  database: config.old_rds_database,
  user: config.old_rds_user,
  password: config.old_rds_password,
  port: config.rds.port,
  ssl: {
    ca: fs.readFileSync(__dirname + '/../rds-combined-ca-bundle.pem')
  }
}

var connection = mysql.createConnection(connectionArgs);

在同一台计算机上,我可以使用MySQL客户端将SSL连接到新的RDS群集,而不会出现问题:

// Works with new RDS serverless cluster:
mysql -u rds_serverless_user -p -h new-rds-serverless-cluster.us-west-2.rds.amazonaws.com -P 3306 --ssl --ssl-ca=./rds-combined-ca-bundle.pem

我可以在没有 SSL的情况下将Node应用程序成功连接到新的无服务器群集:

// Works with new RDS serverless cluster:
const fs = require('fs');
const mysql = require('mysql2');
const config = require('../config');

var connectionArgs = {
  host: config.rds_host,
  database: config.rds_serverless_database,
  user: config.rds_serverless_user,
  password: config.rds_serverless_password,
  port: config.rds.port
}

var connection = mysql.createConnection(connectionArgs);

但是,当我尝试使用SSL证书连接到新的无服务器群集时,出现错误消息,该服务器不支持安全连接:

// Fails with new RDS serverless cluster:
const fs = require('fs');
const mysql = require('mysql2');
const config = require('../config');

var connectionArgs = {
  host: config.rds_host,
  database: config.rds_serverless_database,
  user: config.rds_serverless_user,
  password: config.rds_serverless_password,
  port: config.rds.port,
  ssl: {
    ca: fs.readFileSync(__dirname + '/../rds-combined-ca-bundle.pem')
  }
}


var connection = mysql.createConnection(connectionArgs);

Debug: internal, implementation, error 
Error: Server does not support secure connnection
at ClientHandshake.handshakeInit (/home/deploy_user/my-node-rds-app/node_modules/mysql2/lib/commands/client_handshake.js:120:17)
at ClientHandshake.Command.execute (/home/deploy_user/my-node-rds-app/node_modules/mysql2/lib/commands/command.js:40:20)
at Connection.handlePacket (/home/deploy_user/my-node-rds-app/node_modules/mysql2/lib/connection.js:513:28)
at PacketParser.onPacket (/home/deploy_user/my-node-rds-app/node_modules/mysql2/lib/connection.js:81:16)
at PacketParser.executeStart (/home/deploy_user/my-node-rds-app/node_modules/mysql2/lib/packet_parser.js:76:14)
at Socket.<anonymous> (/home/deploy_user/my-node-rds-app/node_modules/mysql2/lib/connection.js:89:29)
at emitOne (events.js:116:13)
at Socket.emit (events.js:211:7)
at addChunk (_stream_readable.js:263:12)
at readableAddChunk (_stream_readable.js:250:11)
at Socket.Readable.push (_stream_readable.js:208:10)
at TCP.onread (net.js:601:20)

那有什么不同呢? 较旧的RDS数据库与新的无服务器群集之间唯一的明显区别是,旧实例是MySQL 5.6.40,而新RDS群集是Aurora MySQL 5.6.10a。 同样,较旧的RDS实例主机名解析为单个私有IP,而新的群集主机名解析为多个私有IP。

我使用mysql适配器得到相同的结果。 我还尝试在mysql适配器中使用“ Amazon RDS” SSL配置文件,并获得相同的结果。

我无法使用IAM数据库身份验证,因为此服务将需要每秒处理20个以上的新连接。

任何建议将不胜感激。

截至2018年10月,Aurora Serverless不支持SSL。 [1]。 在实验中,您的连接通常会降级为不安全的连接。 您应该能够查询状态表来确认这一点。

[1] https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless.html

Aurora Serverless不支持以下功能:

从Amazon S3存储桶加载数据

使用Aurora MySQL本机函数调用AWS Lambda函数

高级审核

极光副本

原路返回

数据库克隆

IAM数据库身份验证

跨区域读取副本

从MySQL数据库实例还原快照

从Amazon S3迁移备份文件

使用安全套接字层(SSL)连接到数据库集群

我可以确认RDS Aurora MySQL(无服务器)最终确实支持到群集的SSL / TLS连接。 但是,需要一个与MySQL 8.0兼容的客户端(即使基础数据库仅为MySQL 5.6.10a,群集代理也需要一个8.0客户端来支持SSL)。

https://aws.amazon.com/premiumsupport/knowledge-center/rds-error-2026-ssl-connection/

(来自页面:)

错误2026(HY000):SSL连接错误:SSL_CTX_set_default_verify_paths失败,或者错误2026(HY000):SSL连接错误:ASN:其他签名确认错误

如果证书标识符(证书文件名)不正确,则会收到此错误。 如果MySQL客户端不支持证书标识符,例如Aurora Serverless,也会收到此错误。 如果使用Aurora Serverless群集,并且使用MySQL客户端连接到Aurora Serverless,则必须使用与MySQL 8.0兼容的MySQL命令。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM