Node.js OpenSSL 传统提供程序标志 | AI生成和翻译

Home 2025.06

问题根源

Node.js 16(及更早版本)使用 OpenSSL 1.x,而 Node.js 22 引入了具有更严格安全默认设置的 OpenSSL 3.x。这可能导致某些应用程序出错,特别是那些依赖旧版加密提供商或已弃用算法(例如 MD4 哈希)的应用。--openssl-legacy-provider 标志可临时启用与 OpenSSL 1.x 行为的兼容性,以在升级期间解决这些问题。

注意:此标志是临时解决方案,可能在未来的 Node.js 版本中被移除。它最适合短期修复——请尽可能更新代码以使用现代 OpenSSL 3.x API。

如何使用该标志

您可以在直接运行 Node.js 或通过 npm/yarn 脚本时应用此标志。这是一个运行时选项,并非永久性配置。

直接运行 Node 命令

在脚本或命令前添加该标志。示例:

这将启用旧版提供商支持,避免出现诸如 “digital envelope routines unsupported”(与过时的哈希或密码相关)等常见错误。

用于 npm/Yarn 脚本

修改 package.json"scripts" 部分,在相关命令中加入该标志。示例:

{
  "scripts": {
    "start": "node --openssl-legacy-provider app.js",
    "dev": "node --openssl-legacy-provider --watch app.js"
  }
}

然后照常运行:npm startyarn dev

若使用 nodemon 或 vite 等会创建 Node 进程的工具,请在其配置中前置该标志(例如在 nodemon.json 中:"exec": "node --openssl-legacy-provider")。

用于全局命令(如通过 nvm 或系统 Node)

若使用 nvm 管理 Node 版本,请切换至 Node 22 并按所示方式带标志运行命令。对于 Docker 或 CI/CD,请将其添加到运行脚本中(例如 CMD ["node", "--openssl-legacy-provider", "app.js"])。

故障排查与替代方案

更多详细信息,请参阅 Node.js OpenSSL 文档:nodejs.org/api/crypto.html。如果您提供具体的错误信息,我可以给出更具针对性的建议!


Back

x-ai/grok-code-fast-1

Donate