Skip to content
Go back

node.js v17及以上版本使用openssl v3.0引发的哈希算法错误及其解决方法

Edit page

node.js v17及以上版本使用openssl v3.0引发的哈希算法错误及其解决方法

最近在本地构建open-radiant项目.
该项目是JetBrains开源的一个项目, 用于生成AI艺术图片, 在线演示地址为: code2art
在构建的过程中遇到了一些问题.

其中的一个问题是当执行npm start时报错, 相关错误信息如下:


> [email protected] start
> ./node_modules/.bin/webpack-dev-server --mode=development

 「wds」: Project is running at http://localhost:8080/
 「wds」: webpack output is served from /
 「wds」: Content not from webpack is served from /home/orange/Documents/Project/Github/open-radiant
node:internal/crypto/hash:71
  this[kHandle] = new _Hash(algorithm, xofLen);
                  ^

Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:71:19)
    at Object.createHash (node:crypto:133:10)
    at module.exports (/home/orange/Documents/Project/Github/open-radiant/node_modules/webpack/lib/util/createHash.js:135:53)
    at NormalModule._initBuildHash (/home/orange/Documents/Project/Github/open-radiant/node_modules/webpack/lib/NormalModule.js:417:16)
    at handleParseError (/home/orange/Documents/Project/Github/open-radiant/node_modules/webpack/lib/NormalModule.js:471:10)
    at /home/orange/Documents/Project/Github/open-radiant/node_modules/webpack/lib/NormalModule.js:503:5
    at /home/orange/Documents/Project/Github/open-radiant/node_modules/webpack/lib/NormalModule.js:358:12
    at /home/orange/Documents/Project/Github/open-radiant/node_modules/loader-runner/lib/LoaderRunner.js:373:3
    at iterateNormalLoaders (/home/orange/Documents/Project/Github/open-radiant/node_modules/loader-runner/lib/LoaderRunner.js:214:10)
    at Array.<anonymous> (/home/orange/Documents/Project/Github/open-radiant/node_modules/loader-runner/lib/LoaderRunner.js:205:4) {
  opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
  library: 'digital envelope routines',
  reason: 'unsupported',
  code: 'ERR_OSSL_EVP_UNSUPPORTED'
}

Node.js v18.12.1

问题原因

经过网上的一番搜索, 发现这个问题是由于node.js的版本升级到v17及以上版本, 而openssl的版本升级到v3.0引起的.

openssl是一个开源的安全套接字层密码库, 用于提供加密和认证服务.
node.jsv17及以上版本中使用了opensslv3.0版本, 该版本中移除了一些哈希算法, 导致在使用这些算法时报错.

解决方案

这个问题的解决解决方案有以下几种:

参考资料


Edit page
Share this post on:

Previous Post
解决elm依赖下载失败的问题
Next Post
通过延长olcIdleTimeout以减少nslcd中的Can't contact LDAP server日志报错