Heroku的Postgres - Sequelize:{host}没有pg_hba.conf条目

6

我正在尝试在Heroku上使用免费的Postgres数据库运行我的Nodejs应用程序中的迁移操作。

我正在使用Sequelize作为我的ORM。这是我的生产环境连接配置。

const dotenv = require('dotenv');

dotenv.config();

module.exports = {
  production: {
    use_env_variable: 'DATABASE_URL',
    dialect: process.env.DIALECT,
    protocol: process.env.DIALECT,
  }
}

使用上述配置时,出现以下错误:no pg_hba.conf entry for host "000.000.000.0", user "yyyyyyyyyyyyyy", database "xxxxxxxxxxxxx", SSL off 但是当我添加以下选项到配置中时,会出现自签名证书错误。
dialectOptions: {
ssl: true
}

请问,如何解决这个问题?

2个回答

12

将你的 dialectOptions 更改为:

dialectOptions: {
    ssl: {
        rejectUnauthorized: false
    }
}

5
这个相关的答案所解释的那样,设置rejectUnauthorized: false是一个不好的主意,因为它允许您创建非加密连接到数据库,从而可能使您暴露于中间人攻击(MITM攻击)的风险之中。
更好的解决方案是为您的Postgres客户端提供您想要使用的CA证书。在我的情况下,它是由AWS RDS用于北弗吉尼亚地区(us-east-1)的CA证书。我从这个AWS页面下载了CA证书,将其放置在与我想要用来连接到数据库的文件相同的目录中,然后修改了我的配置为:
{
  ...
  dialectOptions: {
    ssl: {
      require: true,
      ca: fs.readFileSync(`${__dirname}/us-east-1-bundle.pem`),
    },
  },
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接