Avoid Digital Envelope Routine Error in Node.js

Got a weird "digital envelope routine::unsupported" error? Who doesn't? Let's get rid of it.

The Error

One day I started my node app, and it failed with a nasty-gram:

Error: error:0308010C:digital envelope routines::unsupported

The Cause

Since node 17, OpenSSL 3.0 is supported, which moves algorithmss like MD4 to a legacy status -- the kind of legacy that throws errors on newer versions of Node.js.

If you see this error, it's because your on node 17+.

Fix 1: Downgrade

Easy, use node 16 or older.

Fix 2: Use Legacy Option

Or use new node with old openssl:

unset NODE_OPTIONS
export NODE_OPTIONS=--openssl-legacy-provider

By the way, it wouldn't work inline for me, but there was some weird tooling involved in this story too:

NODE_OPTIONS=--openssl-legacy-provider node main.js

In the Future?

Obviously, we are not going to use OpenSSL legacy forever. The robot overlords will surely make us upgrade at some point.

I don't know when that is. As long as we have this error, we need to avoid it. Feels like a bug that needs fixed, probably in various places.