PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come aggiungere un certificato SSL (ca-cert) alle variabili di ambiente node.js per connettersi al database gestito di Digital Ocean Postgres?

Va bene, finalmente sono riuscito a capirlo. Penso che il problema fosse multilinea e solo la scarsa familiarità con dotenv per il mio ambiente di sviluppo locale.

Sono stato in grado di far funzionare tutto con il mio codice in questo modo. Funzionava anche con fs.readFileSync() ma non volevo impegnarlo nel mio controllo del codice sorgente.

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)
})

Ora nel mio config.env dovevo farlo sembrare così:

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

Ho dovuto tenerlo come una stringa di riga singola per farlo funzionare. Ma finalmente dovevo entrare in contatto con

{rejectUnauthorized:true} 

Per la variabile di ambiente della piattaforma dell'app oceano digitale, ho copiato tutto, comprese le virgolette doppie, e l'ho incollato lì. Sembra funzionare alla grande. Tuttavia, non credo che sarai in grado di impostare questa impostazione su true con il loro database di sviluppo da $ 7. Ho dovuto eseguire l'aggiornamento a quello gestito per trovare qualsiasi certificato CA da scaricare.