Skip to content

ERR_OSSL_EVP_UNSUPPORTED Error in Node.js ​

Problem Statement ​

The ERR_OSSL_EVP_UNSUPPORTED error occurs when using Node.js version 17+ with certain development tools like Next.js, React, or webpack-based projects. This error manifests as:

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

The issue stems from changes in OpenSSL 3.0, which was introduced in Node.js 17. The new OpenSSL version removed support for older hash algorithms that some build tools still rely on.

Root Cause ​

Node.js 17+ includes OpenSSL 3.0, which deprecated certain legacy cryptographic algorithms that were previously available. Build tools like webpack (used by Next.js, Create React App, and similar frameworks) may still attempt to use these deprecated algorithms for hash generation during the build process, causing the runtime error.

This issue typically affects:

  • Next.js projects
  • React applications
  • Webpack-based builds
  • Docker containers using Node.js 17+
  • Development servers

Solutions ​

The most straightforward solution is to downgrade to Node.js 16 LTS (Long Term Support), which uses OpenSSL 1.1.1 and doesn't have this compatibility issue.

Using nvm (Node Version Manager) ​

bash
# Install Node.js 16
nvm install 16

# Set as default version
nvm alias default 16

# Use in current shell
nvm use 16

Manual Installation ​

Download and install Node.js 16 LTS from the official Node.js website.

2. Environment Variable Workaround ​

If you need to use Node.js 17+, you can set an environment variable to enable legacy OpenSSL provider support:

Unix/Linux/macOS (including Git Bash on Windows) ​

bash
export NODE_OPTIONS=--openssl-legacy-provider

Windows Command Prompt ​

cmd
set NODE_OPTIONS=--openssl-legacy-provider

Windows PowerShell ​

powershell
$env:NODE_OPTIONS="--openssl-legacy-provider"

Package.json Script Modification ​

You can also add the environment variable directly to your npm scripts:

json
{
  "scripts": {
    "dev": "NODE_OPTIONS=--openssl-legacy-provider next dev",
    "build": "NODE_OPTIONS=--openssl-legacy-provider next build",
    "start": "NODE_OPTIONS=--openssl-legacy-provider next start"
  }
}

WARNING

For Windows users, the syntax differs in Command Prompt:

json
{
  "scripts": {
    "dev": "SET NODE_OPTIONS=--openssl-legacy-provider && next dev",
    "build": "SET NODE_OPTIONS=--openssl-legacy-provider && next build"
  }
}

3. Docker Configuration ​

If using Docker, ensure your Dockerfile specifies Node.js 16:

dockerfile
FROM node:16-alpine

# Rest of your Dockerfile configuration

Recommendations ​

Best Practice

We recommend using Node.js 16 LTS for development and production environments until your build tools fully support OpenSSL 3.0. The LTS version provides better stability and long-term support.

Version Compatibility

Check your framework's documentation for Node.js version compatibility:

  • Next.js: Compatible with Node.js 12.22.0 or later
  • React: Generally compatible with Node.js 14 or later
  • Check your specific package dependencies for any version constraints

Verification ​

After applying any solution, verify your Node.js version:

bash
node --version

You should see version 16.x.x if you downgraded, or version 17.x.x with the environment variable workaround.

Long-term Outlook ​

This issue is expected to be resolved as build tools and frameworks update their cryptographic dependencies to be compatible with OpenSSL 3.0. Keep your development tools updated to avoid similar compatibility issues in the future.

Security Note

While the legacy provider workaround resolves the immediate issue, be aware that it uses older cryptographic algorithms that may have security implications. Use this only as a temporary solution until proper updates are available.