【问题标题】:How to configure sequalize & node mysql to use new aws rds root cert rds-ca-2019如何配置 sequelize 和 node mysql 以使用新的 aws rds root cert rds-ca-2019
【发布时间】:2020-04-08 09:50:53
【问题描述】:

随着 AWS 更改 2019 年 rds 服务的根 ssl 证书,2015 年的旧证书将在 03/2020 失效。见https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL-certificate-rotation.html

如何配置 sequalize 以使用新的 rds-ca-2019 证书?

// current sequalize aws rds configuration as of working with 2015 cert
var sequelizeConfig = {
  ...
  host: "xyz.rds.amazonaws.com",
  dialectOptions": {
    ssl: 'Amazon RDS'
  }
}

我想不出任何使用 sequalize 3.x 手动添加证书的选项

【问题讨论】:

  • 为什么需要手动配置
  • 如果要验证证书,请参阅medium.com/soluto-nashville/…
  • 谢谢@jarmod,博客文章似乎包含带有 ca 选项的解决方案。将在接下来的几天内试用。
  • @ArunK ca root 证书更改,因此据我了解,该应用程序需要知道新的公钥,否则它将无法再连接到数据库。不确定,sequelize 从哪里获得证书?或者你认为它会自动选择它?
  • thx jarmod,帖子提供的解决方案

标签: mysql node.js ssl sequelize.js amazon-rds


【解决方案1】:

确保您更新到最新的节点 mysql 包,这可能会在将来解决问题。

截至目前,新的 aws rds-ca-2019 ca 证书似乎尚未合并。 https://github.com/mysqljs/mysql/pull/2280

没有 ca 验证的临时修复:

var sequelizeConfig = {
  ...
  host: "xyz.rds.amazonaws.com",
  dialectOptions: {
    ssl: true
  }
}

并带有证书验证:

// get rds-ca-2019 certificate directly from aws https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem to ensure validity!!!
const fs = require('fs');
const rdsCa = fs.readFileSync(__dirname + '/rds-ca-2019-root.pem');

var sequelizeConfig = {
  ...
  host: "xyz.rds.amazonaws.com",
  dialectOptions: {
    ssl: {
      rejectUnauthorized: true,
      ca: [rdsCa]
    }
  }
}

thx @jarmod 用于链接和帖子 "Best Security Practices for Amazon RDS with Sequelize" by soluto-nashville 显示解决方案

【讨论】:

    【解决方案2】:

    我认为dialectOptions 参数不应定义在pool 内部,而应在外部定义。

    像这样:

    const sequelize = new Sequelize(dbname, username, password, {
      host: 'host name',
      dialect: 'mysql',
      dialectOptions: {
        ssl: 'Amazon RDS'
      },
      pool: {
        ...
      }
    });
    

    或者像这样:

    const sequelize = new Sequelize(dbname, username, password, {
      host: 'host name',
      dialect: 'mysql',
      ssl: 'Amazon RDS'
      dialectOptions: {
        ...
      },
      pool: {
        ...
      }
    });
    

    【讨论】:

    • 你尝试了哪种方法
    • 就我的代码而言,这两个配置选项似乎都有效,但是如果我将我的 rds 更改为新证书,我想我需要告诉节点应用程序新的根证书。我认为@jarmod 链接的博客文章包含带有 ca config 参数的解决方案。我会在接下来的几天内尝试。
    • 将配置复制到 stackoverflow 导致错误。更正了我的配置,因此问题来自 mysql 包。
    猜你喜欢
    • 2020-02-27
    • 2017-04-14
    • 1970-01-01
    • 2020-06-13
    • 1970-01-01
    • 2021-11-13
    • 2021-10-05
    • 2017-06-05
    • 1970-01-01
    相关资源
    最近更新 更多