我想弄清楚如何將我的后端 api (next.js/api) 設定到由 heroku 托管的資料庫 (postgresql)。
由 pg.pool 調解,我使用以下代碼進行設定。
const pool = new Pool(
{
connectionString: process.env.DATABASE_URL,
// ssl: {
// rejectUnauthorized: false,
// }
})
但由 heroku 回傳,并出現以下錯誤:
sql_error_code = 28000 FATAL: no pg_hba.conf entry for host "122.180.247.11", user "u3idolso5k2v83", database "dc85788d13v9ej", SSL off
錯誤描述來自:https : //help.heroku.com/DR0TTWWD/seeing-fatal-no-pg_hba-conf-entry-errors-in-postgres
編輯:打算發布此鏈接,是否可以在生產 PostgreSQL 連接中將 rejectUnauthorized 設定為 false?
身份驗證失敗,因為連接未使用 SSL 加密:(SSL 關閉)。所有 Heroku Postgres 生產資料庫都需要使用 SSL 連接來確保應用程式和資料庫之間的通信保持安全。如果您的客戶端未使用 SSL 連接到您的資料庫,即使您使用正確的憑據連接到它,您也會看到這些錯誤。
我覺得這很奇怪,因為 heroku 確實已經為我的服務器提供了 ssl 默認情況下由他們托管,所以發生這樣的錯誤完全出乎意料?
我在網上遇到的另一種解決方案是取消注釋連接中的 ssl 屬性......它有效,但我對這個感到不安。
const pool = new Pool(
{
connectionString: process.env.DATABASE_URL,
ssl: {
rejectUnauthorized: false,
}
})
正如簡要提到的,這里不安全:https : //security.stackexchange.com/questions/229282/is-it-safe-to-set-rejectunauthorized-to-false-when-using-herokus-postgres-datab
我根本不明白為什么會發生此錯誤,以及如何以適當的安全性修復它。
uj5u.com熱心網友回復:
Postgres 服務器的 SSL 證書無效是非常標準的。即使是官方的 postgres 客戶端也不驗證證書。您使用的庫默認驗證證書,但非常少。
在為https://www.atdatabases.org/docs/pg-options進行設定時,我默認不驗證證書以匹配 Postgres 的標準行為。
這使您可以簡單地使用以下命令為 heroku 創建連接池:
import createConnectionPool from '@databases/pg';
createConnectionPool(process.env.DATABASE_URL);
uj5u.com熱心網友回復:
如您的鏈接答案中所述,您可以升級到支持此功能的 Heroku 付費產品之一。或者你可以停止使用 Heroku。或者,您可以忍受有人將 MITM 您的難以置信的低風險。
我完全不明白為什么會發生這個錯誤,
不明白怎么辦?您鏈接的解釋似乎很清楚。如果你不能比目前更清楚地表達你的不確定性,任何人怎么能幫助你理解?
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/365526.html
標籤:节点.js PostgreSQL的 表达 ssl 英雄联盟
