在生产 PostgreSQL 连接中将rejectUnauthorized 设置为 false 可以吗?

Mat*_*ber 7 postgresql ssl node.js heroku-postgres pg-promise

我们最近转移到 Heroku,并在尝试将我们的应用程序连接到数据库时,它不断拒绝我们的查询,并显示消息“自签名证书”。传递rejectUnauthorized解决了这个问题,但现在我想知道,我们应该在生产中这样做吗?如果没有,我们连接到 Heroku PG 数据库的合适方法是什么?

const pgp = require('pg-promise')(/*initOptions*/);
const {ConnectionString} = require('connection-string');

const cnObj = new ConnectionString(process.env.DATABASE_URL);

const cn = {
  host: cnObj.hostname,
  port: cnObj.port,
  database: cnObj.path?.[0],
  user: cnObj.user,
  password: cnObj.password,
  ssl: {
    rejectUnauthorized: false,
  },
};

const db = pgp(cn);
Run Code Online (Sandbox Code Playgroud)

Lau*_*lbe 9

您面临的风险是有人介入您和 Heroku 服务器并冒充后者。然后他们可以向您出示自己的证书并与您协商连接。中间的人还可以将服务器的挑战传递给您,并使用您的响应代替您登录数据库服务器。

所有这些都假设攻击者可以控制您和 Heroku 服务器之间的网络节点之一。

所以我想说,虽然存在残余风险,但我不会为此失去太多睡眠,除非您正在处理非常敏感的数据,在这种情况下,偏执是一种美德。