Node.js v17中--openssl-legacy-provider参数的含义与作用是什么?
关于
--openssl-legacy-provider参数的含义与运行原理 报错根本原因
Node.js v17及后续版本默认内置了OpenSSL 3.0,该版本的OpenSSL默认禁用了所有被判定为安全性不足的旧加密、哈希算法(包括MD4、MD5等)。
而旧版本的create-react-app底层依赖的webpack,在计算构建产物哈希值时默认调用MD4算法,OpenSSL 3.0不提供该算法的默认支持,因此抛出Error: error:0308010C:digital envelope routines::unsupported错误。
参数的实际作用与运行原理
--openssl-legacy-provider是Node.js专门为适配OpenSSL 3.0推出的启动参数,添加该参数后,Node.js进程启动时会主动加载OpenSSL的旧版本算法提供程序(legacy provider),重新启用所有被OpenSSL 3.0默认禁用的旧算法,以此兼容尚未适配OpenSSL 3.0的旧依赖的调用需求。
你将该参数加在craco指令前的写法,本质是给启动的Node.js进程传入了该兼容参数,后续craco调用webpack执行构建逻辑时,就能正常调用被重新启用的MD4算法,因此报错消失。
注意事项
- 该参数仅在Node.js v17及以上版本生效,在v16及更低版本的Node.js环境中传入会触发「未知参数」报错
- 该方案属于临时兼容手段,长期建议将项目的
react-scripts依赖升级到v5.0.0及以上版本,新版create-react-app已默认将哈希算法替换为符合OpenSSL 3.0安全要求的SHA-256,无需额外添加参数即可正常启动构建
内容的提问来源于stack exchange,提问作者Meet Shah
相关产品推荐
相关产品推荐

