【问题标题】:SequelizeConnectionError: self signed certificateSequelizeConnectionError:自签名证书
【发布时间】:2020-08-04 14:12:36
【问题描述】:

我正在尝试连接到我在 Heroku 中设置的 PostgreSQL 数据库。

const { Sequelize, DataTypes, Model } = require("sequelize");

// DB Configuration
const sequelize = new Sequelize({
  database: "[wont'd show db]",
  username: "[won't show username]",
  password: "[won't show password]",
  host: "ec2-54-221-195-148.compute-1.amazonaws.com",
  port: 5432,
  dialect: "postgres",
  dialectOptions: {
    ssl: true,
  },
});

这就是我得到的输出:

SequelizeConnectionError: 自签名证书

【问题讨论】:

    标签: javascript postgresql express backend


    【解决方案1】:

    这是由于 node-postgres 版本 8 中的(意外)重大更改(请参阅 this GitHub issue)。

    解决方案是将rejectUnauthorized: false传递给dialectOptions内部的sequelize连接参数>ssl,如described here by GitHub user jsanta

    const sequelize = new Sequelize({
      database: "xxxxx",
      username: "xxxxx",
      password: "xxxxx",
      host: "xxxxx",
      port: 5432,
      dialect: "postgres",
      dialectOptions: {
        ssl: {
          require: true,
          rejectUnauthorized: false // <<<<<<< YOU NEED THIS
        }
      },
    });
    

    【讨论】:

    • 这适用于 "sequelize": "^5.21.10", "pg": "^8.2.1",
    • 说真的,sequelize 团队完全了解已发布的 API 吗?就像……完全一样? (叹气)
    • 续集 6.3.5 仅供参考,我必须这样做:ssl: { rejectUnauthorized: false }
    • @WithoutATowel 我已经回答了你的问题。如果它解决了您的问题,请检查并投票。谢谢
    • 误报!我有一个错字。此修复有效:)
    【解决方案2】:

    在我的情况下,以上都不起作用,我使用连接字符串方法来应用 pg 配置,所以我设置了查询参数 sslmode=no-verify 并且我得到了它的工作原理

    例子

    postgres://myuser:mypassword@myhost:5432/mydatabasename?sslmode=no-verify
    

    【讨论】:

    • 是的,在我的情况下也是如此。有谁知道我们为什么要这样做?
    【解决方案3】:

    这对我有用,在 config.json 文件中

      "development": {
        "username": "dummy",
        "password": "dummy",
        "database": "dummy",
        "host": "dummy",
        "dialect": "postgres",
        "dialectOptions":{
          "ssl": {
            "require": true,
            "rejectUnauthorized": false
          }
        }
      }
    

    【讨论】:

    • 很好,但这与我发布的解决方案完全相同,只是没有解释......相反,它指的是不是每个人都拥有的文件。
    【解决方案4】:

    它对我有用(在 sequelize config.json 文件中):

        "dialect": "postgres",
        "dialectOptions": {
          "ssl": {
            "require": true,
            "rejectUnauthorized": false
          }
        }
    

    【讨论】:

      【解决方案5】:

      在您的代码中添加以下内容...

      dbRDS=false
      

      【讨论】:

      • 你能举一个更完整的例子吗?它看起来像一个变量赋值,但仅此一项不会有任何效果......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-01
      • 2017-03-15
      • 2016-11-25
      相关资源
      最近更新 更多