Description
Description:
I can successfully connect to a postgreSQL database using SSL if the certs (as strings) are correctly entered. However, if I alter the ca, key or cert strings (to replicate a user fat-fingering them as they cut and paste them in the UI) I get an uncaughtException and my service falls over because the error doesn't bubble up to me to handle it.
Env:
Docker container
nodejs v11.6.0
pg v^7.12.0
Code:
const postgreSQL = require('pg');
exports.execSQL = (databaseConnectionModel, sql) => new Promise((resolve, reject) => {
try {
let pool;
let config = {};
config = {
host: databaseConnectionModel.host,
port: databaseConnectionModel.port,
user: databaseConnectionModel.user,
password: databaseConnectionModel.password,
database: databaseConnectionModel.database
}
if (databaseConnectionModel.useSSL) {
config.ssl = {
ca: databaseConnectionModel.ca,
key: databaseConnectionModel.key,
cert: databaseConnectionModel.cert
}
}
pool = new postgreSQL.Pool(config);
pool.query(sql, (error, result) => {
if (error) {
pool.end();
reject(error);
} else {
pool.end();
resolve(result);
}
});
} catch (error) {
reject(error);
}
});
error:
error: uncaughtException: error:0906D064:PEM routines:PEM_read_bio:bad base64 decode
Error: error:0906D064:PEM routines:PEM_read_bio:bad base64 decode
at Object.createSecureContext (_tls_common.js:134:17)
at Object.connect (_tls_wrap.js:1221:48)
at Socket. (/usr/src/app/node_modules/pg/lib/connection.js:95:23)
at Object.onceWrapper (events.js:276:13)
at Socket.emit (events.js:188:13)
at addChunk (_stream_readable.js:288:12)
at readableAddChunk (_stream_readable.js:269:11)
at Socket.Readable.push (_stream_readable.js:224:10)
at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:145:17) {"error":{},"stack":"Error: error:0906D064:PEM routines:PEM_read_bio:bad base64 decode\n at Object.createSecureContext (_tls_common.js:134:17)\n at Object.connect (_tls_wrap.js:1221:48)\n at Socket. (/usr/src/app/node_modules/pg/lib/connection.js:95:23)\n at Object.onceWrapper (events.js:276:13)\n at Socket.emit (events.js:188:13)\n at addChunk (_stream_readable.js:288:12)\n at readableAddChunk (_stream_readable.js:269:11)\n at Socket.Readable.push (_stream_readable.js:224:10)\n at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:145:17)","exception":true,"date":"Fri Nov 08 2019 05:02:33 GMT+0000 (Coordinated Universal Time)","process":{"pid":17,"uid":0,"gid":0,"cwd":"/usr/src/app","execPath":"/usr/local/bin/node","version":"v11.6.0","argv":["/usr/local/bin/node","/usr/src/app/index.js"],"memoryUsage":{"rss":51814400,"heapTotal":20148224,"heapUsed":15393352,"external":58506}},"os":{"loadavg":[0.078125,0.05615234375,0.0927734375],"uptime":25640},"trace":[{"column":17,"file":"_tls_common.js","function":"Object.createSecureContext","line":134,"method":"createSecureContext","native":false},{"column":48,"file":"_tls_wrap.js","function":"Object.connect","line":1221,"method":"connect","native":false},{"column":23,"file":"/usr/src/app/node_modules/pg/lib/connection.js","function":null,"line":95,"method":null,"native":false},{"column":13,"file":"events.js","function":"Object.onceWrapper","line":276,"method":"onceWrapper","native":false},{"column":13,"file":"events.js","function":"Socket.emit","line":188,"method":"emit","native":false},{"column":12,"file":"_stream_readable.js","function":"addChunk","line":288,"method":null,"native":false},{"column":11,"file":"_stream_readable.js","function":"readableAddChunk","line":269,"method":null,"native":false},{"column":10,"file":"_stream_readable.js","function":"Socket.Readable.push","line":224,"method":"push","native":false},{"column":17,"file":"internal/stream_base_commons.js","function":"TCP.onStreamRead [as onread]","line":145,"method":"onStreamRead [as onread]","native":false}],"timestamp":"08-11-2019 05:02:33"}