Fix “error:0308010C:digital envelope routines::unsupported” in Node.js

When working with Node.js, developers may encounter various errors that can disrupt the smooth execution of their applications.

One such error is “error:0308010C:digital envelope routines::unsupported“.

The error presents something like this:

How to Fix error: error:0308010c:digital envelope routines::unsupported
Nodejs Error: error:0308010c:digital envelope routines::unsupported

This error typically occurs when attempting to use cryptographic functions or handle digital envelopes that are not supported by the underlying OpenSSL library.

Breaking Changes in NodeJS version 17

Starting from Node.js v17, a breaking change was introduced where certain deprecated and insecure features were removed or disabled by default. So Node.js v17 uses OpenSSL version 3 by default.

This change aims to improve security and align with industry standards.

As a result, if your code relies on deprecated or insecure cryptographic algorithms or methods, you may encounter the “error:0308010C:digital envelope routines::unsupported” error.

To address this, consider the following solution:

Update Code to Use Secure Algorithms: Review your code and ensure that you are using secure and recommended cryptographic algorithms. Refer to the Node.js documentation and cryptographic best practices to identify and update any deprecated or insecure methods in your code.

Why “error:0308010C:digital envelope routines::unsupported” Occurs

The “error:0308010C:digital envelope routines::unsupported” error is an indication that the cryptographic operation being performed is not supported by the OpenSSL library used by Node.js.

This error occurs when trying to use unsupported features, algorithms, or encryption methods, resulting in the failure of the operation.

Understanding the underlying cause is crucial in order to implement the correct solution.

Common Causes of the Error:


Several factors can lead to the “error:0308010C:digital envelope routines::unsupported” error. Some common causes include:

  • Outdated OpenSSL Version: The error may occur if you are using an outdated version of the OpenSSL library that does not support the specific cryptographic operation or algorithm being used.
  • Unsupported Encryption Algorithm: Certain encryption algorithms may not be supported by the OpenSSL library in use, leading to the error when attempting to use them.
  • Incompatibility with External Libraries: If your Node.js application relies on external libraries or modules that use cryptographic operations, it’s possible that they are incompatible with the OpenSSL library, resulting in the error.

Solutions to the Error


To resolve the “error:0308010C:digital envelope routines::unsupported” error, consider the following solutions:

Use --openssl-legacy-provider flag

Using the --openssl-legacy-provider flag is another potential solution to address the “error:0308010C:digital envelope routines::unsupported” error in Node.js.

This flag allows you to use the legacy OpenSSL provider, which can help resolve compatibility issues with certain cryptographic operations or algorithms.

To use the --openssl-legacy-provider flag, follow these steps:

  1. Open your command prompt or terminal.
  2. Run your Node.js application with the following command:
   node --openssl-legacy-provider your_app.js

Replace your_app.js with the actual filename of your Node.js application.

By specifying the --openssl-legacy-provider flag, you instruct Node.js to utilize the legacy OpenSSL provider, which may support the cryptographic features required by your code.

However, it’s important to note that the legacy provider may have security implications, as it might not receive the latest updates and patches.

Therefore, this solution should be used cautiously and only if necessary. It’s recommended to consider updating your code or using alternative secure cryptographic libraries whenever possible.

Remember to stay informed about the latest updates and security best practices regarding cryptographic operations in Node.js to ensure the long-term stability and security of your application.

Downgrade Nodejs to version 16 (v16)

Another solution to address the “error:0308010C:digital envelope routines::unsupported” error is to consider downgrading Node.js to a version where the unsupported features or breaking changes are not present.

By reverting to an earlier version that supports the cryptographic algorithms or methods used in your code, you can avoid encountering the error.

However, it’s important to note that downgrading Node.js should be approached with caution, as it may impact other aspects of your application and potentially introduce security vulnerabilities.

Therefore, it is advisable to exhaust other solutions, such as updating your code and adopting secure algorithms, before considering a downgrade.

Other solutions include:

  • Update OpenSSL: Ensure that you have the latest version of the OpenSSL library installed. Update Node.js if necessary, as newer versions often come bundled with updated OpenSSL libraries.
  • Check Algorithm Compatibility: Verify that the encryption algorithm or operation you are using is supported by the OpenSSL library. Consult the OpenSSL documentation or the documentation of any relevant libraries to ensure compatibility.
  • Use Alternative Libraries: If the error persists, consider using alternative cryptographic libraries or modules that are compatible with your desired encryption methods. For example, you can explore libraries like crypto-js or bcrypt that provide alternative cryptographic implementations.
  • Verify Library Compatibility: If you are using external libraries or modules, ensure they are compatible with the version of Node.js and the OpenSSL library you are using. Check for any known issues or updates related to the library in question.

Example of successful usage:

const crypto = require('crypto');

try {
  // Perform cryptographic operation using unsupported algorithm
  const cipher = crypto.createCipher('unsupportedAlgorithm', 'secretKey');
  const encryptedData = cipher.update('plaintext', 'utf8', 'hex');
  const finalEncryptedData = encryptedData + cipher.final('hex');
  console.log(finalEncryptedData);
} catch (error) {
  console.error(`Error: ${error}`);
}

Final Thoughts

The “error:0308010C:digital envelope routines::unsupported” error in Node.js can disrupt cryptographic operations when using unsupported features or algorithms.

By understanding the causes and following the solutions outlined in this article, developers can effectively troubleshoot and resolve this error.

Whether it involves updating the OpenSSL library, checking algorithm compatibility, using alternative libraries, or ensuring compatibility with