【问题标题】:How to add an SSL certificate (ca-cert) to node.js environment variables in order to connect to Digital Ocean Postgres Managed Database?如何将 SSL 证书 (ca-cert) 添加到 node.js 环境变量以连接到 Digital Ocean Postgres 托管数据库?
【发布时间】:2021-06-04 15:48:11
【问题描述】:

我目前正在使用 node-postgres 来创建我的池。这是我当前的代码:

const { Pool } = require('pg')

const pgPool = new Pool({
  user: process.env.PGUSER,
  password: process.env.PGPASSWORD,
  host: process.env.PGHOST,
  database: process.env.PGDATABASE,
  port: process.env.PGPORT,
  ssl: {
    rejectUnauthorized: true,
    // Would like to add line below
    // ca: process.env.CACERT,
},
})

我发现了另一个帖子,他们使用“fs”在证书中阅读,如下所示。

const config = {
database: 'database-name',
host: 'host-or-ip',
user: 'username',
password: 'password',
port: 1234,
// this object will be passed to the TLSSocket constructor
ssl: {
  ca: fs.readFileSync('/path/to/digitalOcean/certificate.crt').toString()
 }
}

我无法做到这一点,因为我正在使用 git 来部署我的应用程序。特别是数字海洋新应用平台。我曾尝试与他们联系,但没有成功。我不想在我的源代码管理中提交我的证书。我看到很多人建议设置的帖子

ssl : { rejectUnauthorized: false}

这不是我想要采取的方法。我的代码确实可以使用,但我希望它是安全的。

感谢任何帮助。

【问题讨论】:

    标签: node.js postgresql ssl digital-ocean node-postgres


    【解决方案1】:

    好吧,我终于弄明白了。我认为这个问题是多行的,只是对我本地开发环境的 dotenv 不熟悉。

    我能够像这样使用我的代码完成所有工作。它也适用于 fs.readFileSync(),但我不想将其提交给我的源代码管理。

    const { Pool } = require('pg')
    const fs = require('fs')
    
    const pgPool = new Pool({
    user: process.env.PGUSER,
    password: process.env.PGPASSWORD,
    host: process.env.PGHOST,
    database: process.env.PGDATABASE,
    port: process.env.PGPORT,
    ssl: {
        rejectUnauthorized: true,
        // ca: fs.readFileSync(
        //     `${process.cwd()}/cert/ca-certificate.crt`.toString()
        // ),
        ca: process.env.CA_CERT,
    },
    })
    .on('connect', () => {
        console.log('connected to the database!')
    })
    .on('error', (err) => {
        console.log('error connecting to database ', err)
    })
    

    现在在我的 config.env 中,我必须让它看起来像这样:

    CA_CERT="-----BEGIN CERTIFICATE-----\nVALUES HERE WITH NO SPACES AND A \n 
    AFTER EACH LINE\n-----END CERTIFICATE-----"
    

    我必须将其保留为单行字符串才能使其正常工作。但我终于要联系上了

    {rejectUnauthorized:true} 
    

    对于数字海洋应用平台环境变量,我复制了包括双引号在内的所有内容并将其粘贴在那里。似乎工作得很好。不过,我认为您无法使用他们的 $7 开发数据库将此设置设置为 true。我必须升级到托管的才能找到要下载的任何 CA 证书。

    【讨论】:

    • 在使用应用平台时,我必须手动上传 app_spec.yaml 才能使其正常工作,但如果最终这样做了
    猜你喜欢
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 2022-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多