Knex Heroku错误:自签名证书

时间:2020-05-13 22:06:38

标签: javascript ssl heroku knex.js dotenv

我不断收到此错误:

Error: self signed certificate

在终端中运行此命令时:

knex migrate:latest --env production

我的knexfile.js

       require('dotenv').config(); 
module.exports = {
      development: {
        client: "pg",
        connection: {
          host: "localhost",
          database: "my-movies"
        }
      },

      production: {
        client: "pg",
        connection: process.env.DATABASE_URL
      }
    };

我的.env文件:

DATABASE_URL=<my_database_url>?ssl=true

Heroku应用信息:

Addons:         heroku-postgresql:hobby-dev
Auto Cert Mgmt: false
Dynos:
Git URL:        https://git.heroku.com/path-name.git
Owner:          xxxxxxxxx@xxxx.com
Region:         us
Repo Size:      0 B
Slug Size:      0 B
Stack:          heroku-18
Web URL:        https://my-appname.herokuapp.com/

我尝试将键值对放在ssl的knexfile中的生产中:true,并且遇到相同的错误。我过去很多次都这样做过,而且从未遇到过这个问题。想知道Heroku是否进行了任何更改,但是在搜索文档时我什么都找不到。

3 个答案:

答案 0 :(得分:13)

knexfile.js 处的以下配置对我有用。

...
production: {
    client: 'postgresql',
    connection: { 
        connectionString: process.env.DATABASE_URL,
        ssl: { rejectUnauthorized: false }
    }
}
...

其中 DATABASE_URL 是您通过运行 heroku config --yourAppName 获得的内容

答案 1 :(得分:3)

ssl: { rejectUnauthorized: false } pg 配置目前对我也不起作用..但我通过 heroku docs

找到了一个临时(可能是永久的)解决方案

设置以下配置变量:

heroku config:set PGSSLMODE=no-verify

答案 2 :(得分:0)

这是由于pg @ ^ 8(2020/02/25)cf. this heroku help forum

您可以获得full pg@^8 announcement,但相关段落如下:

现在,我们将对tls.connect使用默认的ssl选项,其中包括启用了rejectUnauthorized的功能。这意味着,如果您使用的是自签名证书,则连接尝试可能会失败。

似乎heroku在某处使用自签名证书。

可能的解决方案:

  • 降级为pg @ ^ 7
  • 指示pg @ ^ 8忽略有问题的证书ssl: { rejectUnauthorized: false }(请参见上面的公告)
  • 找到一种下载并信任证书instructions
  • 的方法