在 Node.js 中,如果你遇到了关于 Error: error:0308010C:digital envelope routines::unsupported
的错误,这通常是因为 Node.js 版本的问题。从 Node.js 17 开始,默认启用了 OpenSSL 3,而 OpenSSL 3 引入了一些与之前版本不兼容的更改。特别是,OpenSSL 3.0 默认启用了 FIPS 140-2 模式,这可能会影响某些加密算法的使用。
# 解决方案
# 方法 1:设置环境变量
你可以通过设置环境变量 NODE_OPTIONS
来禁用 OpenSSL 的 FIPS 模式。在你的命令行中,你可以这样设置:
export NODE_OPTIONS=--openssl-legacy-provider |
或者,如果你使用的是 Windows 系统,可以在命令行中运行:
set NODE_OPTIONS=--openssl-legacy-provider |
然后,重新运行你的 Node.js 应用。
# 方法 2:升级你的代码库
如果你的代码库是基于较老的 Node.js 版本编写的,并且使用了特定的加密算法,你可能需要更新这些代码以兼容 OpenSSL 3.0。例如,如果你使用了特定的加密函数或库,确保它们支持 OpenSSL 3.0。
# 方法 3:降级 Node.js 版本
如果升级你的代码库不可行或太复杂,你也可以考虑将 Node.js 的版本降级到 16 或更早的版本,这些版本使用 OpenSSL 1.1.1,与之前的版本兼容性更好。你可以使用 nvm
(Node Version Manager)来管理不同的 Node.js 版本:
nvm install 16 | |
nvm use 16 |
# 检查你的 Node.js 和 OpenSSL 版本
为了确认你的 Node.js 和 OpenSSL 的版本,你可以在命令行中运行以下命令:
node -vnode -p process.versions.openssl |
这些命令将帮助你了解你的环境配置,从而选择合适的解决方案。
# 总结
通常,设置 NODE_OPTIONS=--openssl-legacy-provider
是解决这类问题的最快方法,因为它不需要修改代码或降级 Node.js 版本。然而,长远来看,最好是更新你的代码库以确保与最新的 Node.js 和 OpenSSL 版本兼容。