Node.js项目 解决error:0308010C:digital envelope routines::unsupported 的方法
本帖最后由 lavonXV 于 2024-5-26 13:00 编辑在使用 Node.js 开发项目时,您可能会遇到以下错误信息:
error:0308010C:digital envelope routines::unsupported
这个错误通常与 OpenSSL 配置有关,尤其是在升级到 Node.js 17 及更高版本时。本文将详细介绍该错误的原因,并提供多种解决方案,帮助您快速解决这一问题。
1. 错误原因
1.1 OpenSSL 的变化
从 Node.js 17 开始,默认使用 OpenSSL 3.0,而不是之前的 OpenSSL 1.1。OpenSSL 3.0 引入了很多变化,其中一些加密算法和协议在默认情况下不再支持,这可能导致某些依赖旧版 OpenSSL 的代码出现上述错误。
1.2 不支持的加密算法
在使用一些加密库或操作时,可能会调用到已经被弃用或不再默认支持的加密算法。这也是导致 `error:0308010C:digital envelope routines::unsupported` 错误的主要原因之一。
2. 解决方法
2.1 降级到 Node.js 16 或更低版本
最简单的解决方法是降级到 Node.js 16 或更低版本,因为这些版本使用的是 OpenSSL 1.1,不会出现上述错误。
(1) 使用 nvm(Node Version Manager)进行降级:
nvm install 16
nvm use 16
(2) 确认降级成功:
node -v
2.2 设置环境变量
如果希望继续使用 Node.js 17 或更高版本,可以通过设置环境变量来临时解决该问题。
(1) 在运行 Node.js 应用程序之前,设置以下环境变量:
export NODE_OPTIONS=--openssl-legacy-provider
(2) 或者在运行应用程序时直接指定环境变量:
NODE_OPTIONS=--openssl-legacy-provider node your-app.js
2.3 修改 package.json
为了在项目中永久解决该问题,可以在 `package.json` 中添加启动脚本,自动设置环境变量。
(1) 在 `package.json` 的 `scripts` 部分添加以下内容:
"scripts": {
"start": "NODE_OPTIONS=--openssl-legacy-provider node your-app.js"
}
(2) 这样在运行 `npm start` 时,环境变量会自动设置。
2.4 更新依赖库
有时候错误是由于某些依赖库不兼容 OpenSSL 3.0 引起的。检查并更新项目中的依赖库,确保它们都兼容最新的 Node.js 版本。
(1) 使用 npm 检查并更新依赖库:
npm outdated
npm update
(2) 确保更新后的依赖库没有新的兼容性问题。
2.5 检查自定义加密代码
如果项目中使用了自定义加密代码,确保这些代码兼容 OpenSSL 3.0。检查并更新加密算法和配置,避免使用已被弃用的算法。
(1) 查阅 OpenSSL 3.0 的官方文档,了解哪些算法和配置已被弃用。
(2) 更新代码中使用的加密算法,例如,从 MD4 算法切换到 SHA-256 算法。
const crypto = require('crypto');
// 更新前(可能导致错误)
const hash = crypto.createHash('md4').update('data').digest('hex');
// 更新后(兼容 OpenSSL 3.0)
const hash = crypto.createHash('sha256').update('data').digest('hex');
3. 总结
在使用 Node.js 17 及更高版本时,可能会遇到 `error:0308010C:digital envelope routines::unsupported` 错误。本文介绍了该错误的原因,并提供了五种解决方法:降级 Node.js 版本、设置环境变量、修改 `package.json`、更新依赖库以及检查自定义加密代码。根据实际情况选择合适的方法,可以快速解决这一问题,确保项目正常运行。
页:
[1]