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

[其它] 项目运行95%报错 Error: error:0308010C:digital envelope routines::unsupported解决

[复制链接]

279

主题

0

回帖

964

积分

超级版主

积分
964
发表于 2024-6-14 11:57:26 | 显示全部楼层 |阅读模式
本帖最后由 Shaw0xyz 于 2024-6-14 12:34 编辑

1. 引言

在前端开发中,遇到错误是不可避免的。最近,很多开发者在运行项目时遇到一个常见的错误:Error: error:0308010C:digital envelope routines::unsupported。这通常发生在使用Node.js的项目中,尤其是在升级到Node.js 17或更高版本时。本文将详细分析这个错误的原因,并提供解决方案。

2. 错误分析

2.1 错误来源

错误的完整信息通常如下:

  1. Error: error:0308010C:digital envelope routines::unsupported
复制代码


这个错误主要是由于OpenSSL 3.0在Node.js 17及更高版本中引入的新特性和更严格的安全性检查引起的。OpenSSL是一个用于实现安全通信的开源工具库,而Node.js依赖OpenSSL来处理各种加密操作。在升级到Node.js 17后,某些加密算法和用法变得不再受支持,导致此错误。

2.2 受影响的场景

此错误常见于以下场景:

(1) 使用老旧的加密库或代码。

(2) 项目依赖的某些第三方库未更新以支持OpenSSL 3.0。

(3) 构建工具(如Webpack、Gulp)在处理加密相关任务时出错。

3. 解决方案

根据问题的来源,有多种解决方案可以尝试。

3.1 降级Node.js版本

最简单的解决方案是降级Node.js版本到16或更低版本,这些版本使用的是OpenSSL 1.1.1,并不会遇到此问题。

(1) 下载Node.js 16或更低版本的安装包,并重新安装。

(2) 检查Node.js版本是否正确:

node -v

3.2 设置Node.js环境变量

如果必须使用Node.js 17或更高版本,可以通过设置环境变量来绕过此问题。

linux或macOS系统中,可以在终端中输入:

export NODE_OPTIONS=--openssl-legacy-provider

windows系统中,可以在命令提示符中输入:

set NODE_OPTIONS=--openssl-legacy-provider

也可以在项目的启动脚本中添加这一行代码:

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


3.3 更新依赖包

确保所有依赖包都是最新的版本,因为很多第三方库已经发布了兼容OpenSSL 3.0的更新版本。

(1) 使用以下命令更新所有依赖包:

  1. npm update
复制代码


(2) 如果某些依赖包未自动更新,可以手动更新:

  1. npm install package-name@latest
复制代码


3.4 修改加密代码

如果错误是由自定义加密代码引起的,可以尝试更新代码以使用受支持的加密算法和用法。以下是一个示例:

旧代码:

  1. const crypto = require('crypto');
  2. const decipher = crypto.createDecipher('aes-256-cbc', 'password');
复制代码


新代码:

  1. const crypto = require('crypto');
  2. const decipher = crypto.createDecipheriv('aes-256-cbc', Buffer.from('password'), iv);
复制代码


请确保在创建decipher对象时,提供一个有效的初始化向量(iv)。

4. 预防措施

为了避免将来遇到类似的问题,建议:

(1) 定期更新Node.js和所有依赖包,确保使用最新的安全补丁和特性。

(2) 在升级Node.js版本之前,阅读相关的变更日志和迁移指南,了解可能的兼容性问题。

(3) 编写测试用例,并在升级依赖包或Node.js版本后运行测试,确保项目功能正常。

5. 总结

Error: error:0308010C:digital envelope routines::unsupported 是由于Node.js 17及更高版本中引入的OpenSSL 3.0引起的常见错误。本文提供了多种解决方案,包括降级Node.js版本、设置环境变量、更新依赖包和修改加密代码。通过这些方法,可以有效解决这一错误,并确保项目在新版本的Node.js中正常运行。希望本文对你有所帮助。如果有其他问题,请参考相关文档或社区资源获取更多支持。



/ 荔枝学姐de课后专栏 /

Hi!这里是荔枝学姐~

欢迎来到我的课后专栏

自然语言学渣 NLP摆烂姐

热衷于技术写作 IT边角料

AIGC & Coding & Linux ...

~互撩~ TG: @Shaw_0xyz
荔枝学姐爱吃荔枝!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by 主机论坛 HostSsss.Com

HostSsss.Com

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