找回密码
 立即注册
查看: 782|回复: 0

[其它] Node.js项目 解决error:0308010C:digital envelope routines::unsupported 的方法

[复制链接]

19

主题

0

回帖

83

积分

注册会员

积分
83
发表于 2024-5-26 12:59:29 | 显示全部楼层 |阅读模式
本帖最后由 lavonXV 于 2024-5-26 13:00 编辑

在使用 Node.js 开发项目时,您可能会遇到以下错误信息:

  1. 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)进行降级:


  1. nvm install 16
  2. nvm use 16
复制代码



(2) 确认降级成功:


  1. node -v
复制代码



2.2 设置环境变量

如果希望继续使用 Node.js 17 或更高版本,可以通过设置环境变量来临时解决该问题。

(1) 在运行 Node.js 应用程序之前,设置以下环境变量:


  1. export NODE_OPTIONS=--openssl-legacy-provider
复制代码



(2) 或者在运行应用程序时直接指定环境变量:


  1. NODE_OPTIONS=--openssl-legacy-provider node your-app.js
复制代码



2.3 修改 package.json

为了在项目中永久解决该问题,可以在 `package.json` 中添加启动脚本,自动设置环境变量。

(1) 在 `package.json` 的 `scripts` 部分添加以下内容:


  1. "scripts": {
  2.   "start": "NODE_OPTIONS=--openssl-legacy-provider node your-app.js"
  3. }
复制代码



(2) 这样在运行 `npm start` 时,环境变量会自动设置。

2.4 更新依赖库

有时候错误是由于某些依赖库不兼容 OpenSSL 3.0 引起的。检查并更新项目中的依赖库,确保它们都兼容最新的 Node.js 版本。

(1) 使用 npm 检查并更新依赖库:


  1. npm outdated
  2. npm update
复制代码



(2) 确保更新后的依赖库没有新的兼容性问题。

2.5 检查自定义加密代码

如果项目中使用了自定义加密代码,确保这些代码兼容 OpenSSL 3.0。检查并更新加密算法和配置,避免使用已被弃用的算法。

(1) 查阅 OpenSSL 3.0 的官方文档,了解哪些算法和配置已被弃用。

(2) 更新代码中使用的加密算法,例如,从 MD4 算法切换到 SHA-256 算法。


  1. const crypto = require('crypto');

  2. // 更新前(可能导致错误)
  3. const hash = crypto.createHash('md4').update('data').digest('hex');

  4. // 更新后(兼容 OpenSSL 3.0)
  5. const hash = crypto.createHash('sha256').update('data').digest('hex');
复制代码



3. 总结

在使用 Node.js 17 及更高版本时,可能会遇到 `error:0308010C:digital envelope routines::unsupported` 错误。本文介绍了该错误的原因,并提供了五种解决方法:降级 Node.js 版本、设置环境变量、修改 `package.json`、更新依赖库以及检查自定义加密代码。根据实际情况选择合适的方法,可以快速解决这一问题,确保项目正常运行。

资讯 | 优惠 | 测评 | 技术
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

联系站长|Archiver|手机版|小黑屋|主机论坛

GMT+8, 2025-4-4 13:47 , Processed in 0.057803 second(s), 24 queries .

Powered by 主机论坛 HostSsss.Com

HostSsss.Com

快速回复 返回顶部 返回列表