Question

MongoNetworkError: self signed certificate in certificate chain

Posted December 16, 2021 361 views
MongoDBNode.jsDigitalOcean App PlatformDigitalOcean Managed MongoDB Database

I try to connect to a managed MongoDB from an Express/NodeJS component hosted in Digital Ocean apps. The MongoDB database is added as component to the app. This created a DATABASE_URL env variable and I’m using that.

But my express app crashes with MongoServerSelectionError: self signed certificate in certificate chain

What could cause that? I can connect from MongoDB compass, but that is a different connection string. (with certificate)

These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.

×
Submit an Answer
2 answers

Hello, have you tried using the certificate that is provided by the bound environment variable?

See:
https://docs.digitalocean.com/products/app-platform/how-to/use-environment-variables/#component-specific-variables

And use the ssl cert provided by ${<db-name>.CA_CERT} (mapping to whatever env name you would like when you connect, making sure to specify the sslCA:
https://mongoosejs.com/docs/tutorials/ssl.html#ssl-validation

Thanks, not sure if this is the best way, but this works:

let mongoCertPath = path.resolve("./ca-certificate.crt");
if (process.env.CA_CERT) {
  fs.writeFileSync(mongoCertPath, process.env.CA_CERT);
}

let client = new MongoClient(process.env.DATABASE_URL, {
  sslCA: mongoCertPath,
});
let clientPromise = client.connect();