首页 > 编程语言 >nodeJS构建错误——digital envelope routines::unsupported

nodeJS构建错误——digital envelope routines::unsupported

时间:2024-10-09 18:48:42浏览次数:11  
标签:nodeJS routines envelope OpenSSL openssl 算法 legacy 版本 md4

最近正在调研开源工作流项目,从github上克隆的代码,执行npm run dev报错。错误如下:

图片

查找原因

出现了问题,自然要想办法解决。
在网上搜索了一圈,发现该问题早已出现,一般描述的大致原因就是:当 nodejs 升级到17+版本以后,开始支持 OpenSSL 3.0,而 OpenSSL 3.0 对各种摘要算法做了更严格的限制,可能会导致一些程序运行错误。

但其实,只有这个开源项目出现了问题,所以得搞清楚其中的具体原因,到底是哪些地方影响了项目运行。

而要搞清原因,还得回到错误信息里,仔细查看上图里的错误信息,可以发现:Error 出现在了 compression-webpack-plugin包的 dist\index.js 代码文件,查看该文件,可知主要是用于压缩时创建hash值,这部分的核心代码如下所示:

图片

从上面的代码我们可以发现,compression-webpack-plugin压缩文件使用了node中的crypto 加密模块,使用md4加密算法进行hash计算。

查看nodejs的crypto模块

回到错误源码上,主要是这句代码出错:

_crypto.default.createHash('md4').update(input).digest('hex')

查看nodeJS官方文档

The algorithm is dependent on the available algorithms supported by the version of OpenSSL on the platform. Examples are 'sha256', 'sha512', etc. On recent releases of OpenSSL, openssl list-message-digest-algorithms will display the available digest algorithms.

翻译出来大概意思是:algorithm 取决于平台上 OpenSSL 版本支持的可用算法。例如 'sha256'、'sha512' 等。在最近的 OpenSSL 版本中,openssl list -digest-algorithms 将显示可用的摘要算法。

图片

显示当前运行环境支持md4加密算法,这就奇怪了,那为什么报错呢?继续查看 openssl 3.0 相关的文档,经过寻找,终于发现问题的细节:

OpenSSL 中提供了5个 Provider (它表示算法实现的容器),我们需要了解如下两个: 

    default:默认,提供了所有标准的内置算法,如果没明确指定则将使用默认算法容器; 

    legacy:遗留,已不常用或者被反对使用的算法,正常情况下不可用,除非显式地指定使用 legacy 容器; 

openssl 3.0 正常都是使用 default 容器提供的算法,而 md4 却位于 legacy 算法容器中,所以正常情况下并不支持 md4 算法,因此导致错误。

legacy 算法容器中包含以下算法

图片

解决方法

1、卸载compression-webpack-plugin

治标不治本,导致打包项目文件比较庞大,有得有失

2、在package.json中添加设置

图片

这种方式之前的项目中使用过,只是当时没有研究。而且团队合作中,不同的node版本使用起来会比较麻烦,每次都需要删除/添加。

// 低版本不支持 

node: --openssl-legacy-provider is not allowed in NODE_OPTIONS

3、nodejs版本降级或多版本管理

使用nvm管理多版本Node,或者直接降级Node。不过项目繁多,环境也不能经常切换,也是比较麻烦。

小结

解决的方法繁多,根据自己的项目配置选择适合的方案,黑猫白猫,抓住老鼠就是好猫。

可以关注我的公众号,交流相关技术,谢谢支持!

标签:nodeJS,routines,envelope,OpenSSL,openssl,算法,legacy,版本,md4
From: https://blog.csdn.net/baidu_34933108/article/details/142754293

相关文章

  • 基于nodejs+vue移动购物管家app[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着移动互联网技术的迅猛发展,智能手机已成为人们日常生活中不可或缺的一部分。在这一背景下,移动购物逐渐取代了传统购物方式,成为现代消费的主流模式。消费......
  • 基于nodejs+vue移动互联时代的设备管理系统[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着移动互联网技术的飞速发展,各类智能设备在日常生产和生活中的应用日益广泛。从智能手机到可穿戴设备,从工业控制设备到智能家居系统,这些设备极大地提升了......
  • 基于nodejs+vue颐心家政服务网站[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着现代生活节奏的加快,越来越多的家庭面临着时间管理和家务分配的挑战。传统的家政服务虽然在一定程度上缓解了这一压力,但信息不对称、服务质量参差不齐、......
  • 基于nodejs+vue易逛漫展[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着动漫文化的日益普及,漫展作为一种集动漫展示、互动体验、商品交易于一体的综合性文化活动,受到了广大动漫爱好者的热烈追捧。然而,传统的漫展参与方式往往......
  • 基于nodejs+vue易买电商管理网站[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,电子商务已成为现代商业活动的重要组成部分。易买电商管理网站作为电子商务领域的一个重要应用,旨在提供一个高效、便捷、安全的在......
  • 基于nodejs+vue易行汽车租赁平台[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着城市化进程的加速和人们生活水平的提高,汽车租赁作为一种便捷、灵活的出行方式,日益受到广大消费者的青睐。近年来,我国汽车租赁市场呈现出蓬勃发展的态势,......
  • 01_nodejs_phantomjs_nodemailer
    代码块nodejs-phantomjs-nodemailer功能每天定时截图,并把截到的图片自动通过邮件发送。说明代码注释已经非常详细,就不多做说明,需要的朋友自己查看代码即可,主文件Mail.js,截图文件capturePart1.js,capturePart2.js,capturePart3.js,这里只展示了capturePart1.js其他两个类似。值得......
  • nodejs基本使用
    node.js基本使用 1.压缩并整合html、js文件(注:压缩后放html类型文件里,才可以运行显示页面)//压缩html和js文件constfs=require('fs')constpath=require('path')//读取、压缩html文件fs.readFile(path.join(__dirname,'index.html'),'utf8',(err,data)=>......
  • NodeJS阅读分享系统-计算机毕业设计源码65669
    基于微信小程序的阅读分享系统的设计与实现摘 要随着移动互联网的快速发展和普及,微信小程序作为一种轻量级、便捷的应用形式,受到了广泛关注和应用。在大学生群体中,阅读和分享是重要的学习和交流方式,因此开发一款基于Node.js的微信小程序阅读分享系统具有重要意义。通过该系......
  • 基于nodejs+vue学生网课学习数据分析与展示系统[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展和全球疫情的持续影响,在线教育已成为教育领域的重要组成部分。各大教育平台纷纷推出网课服务,以满足广大学生在家学习的需求。然而,......