资讯 Node.js 22 LTS 升到 24 LTS:OpenSSL 3.5 默认安全级别 2,老证书会先连不上

2026-09-30 21:07:14

Node.js 22 LTS 升到 24 LTS:OpenSSL 3.5 默认安全级别 2,老证书会先连不上

Node.js 24.11.0 发布后,Node.js 24 发布线进入 Long-Term Support (LTS),代号 Krypton,持续更新到 2028 年 4 月底。下面是 Node.js 22 LTS 升到 24 时,来自 Node.js 23.0.0 与 24.0.0 两条发布线的破坏性变更与排查顺序。官方迁移指南见 Node.js v22 to v24 migration guide。

预编译二进制

  • 自 Node.js 23.0.0 起不再提供 32 位 Windows (x86) 预编译二进制。
  • 自 Node.js 24.0.0 起不再提供 32 位 Linux on armv7 预编译二进制。
  • macOS 预编译二进制现在要求最低 macOS 13.5。
  • Linux 上的 arm64、ppc64le、s390x、x64 预编译二进制继续兼容 glibc 2.28 及以上(与 Node.js 22 相同)。

CI 里还挂着 win32/x86 或 armv7 runner 的,升级前先把这些 job 换掉或改成源码构建。

OpenSSL 3.5:默认安全级别 2

Node.js 24 LTS 的预编译二进制(或用默认构建配置自行构建的产物)包含 OpenSSL 3.5。Node.js 24 LTS 使用 OpenSSL 3.5 的默认安全级别 2,意味着:

  • 短于 2048 位的 RSA、DSA、DH 密钥,以及短于 224 位的 ECC 密钥,被禁止。
  • 任何使用 RC4 的 cipher suite,同样被禁止。

这条通常在升级后第一时间暴露:出站 HTTPS 指向还在用 1024 位 RSA 证书的服务,或对端 cipher 列表里还留着 RC4,都会直接握手失败。如果依赖旧的密钥或弱 cipher,升级前应针对 Node.js 24 构建测试工作负载,或者先调整密钥长度与 cipher 选择。检查现有证书的密钥位数和对端 cipher 列表,是这一步的入口动作。

其他行为变化与参数校验

  • fetch() 的合规性检查更严格。
  • AbortSignal 参数校验加强。
  • stream/pipe 错误现在会抛出。
  • Buffer 行为有变化。
  • Windows 上的路径处理修复。
  • test runner 默认值调整。

原生扩展与构建工具链

链接 V8 API 的 addon 可能需要针对 V8 13.6 更新;过去用 C++17 的地方可能需要 C++20。尽量用 NODE-API,减少每次大版本都要重新编译的负担。

从源码构建时:AIX 与 Linux 平台最低 gcc 版本为 12.2;macOS 最低 Xcode 版本为 16.1。

Node.js 24.0.0 本身的变化

  • V8 升级到 13.6,npm 升级到 11。
  • 从 Node.js 24 起移除对 MSVC 的支持,Windows 上编译 Node.js 现在需要 ClangCL。
  • AsyncLocalStorage API 现在默认使用 AsyncContextFrame。
  • URLPattern 全局可用。

弃用与移除(23/24)

  • url.parse() 运行时弃用,改用 WHATWG URL API。
  • 移除已弃用的 tls.createSecurePair。
  • SlowBuffer 运行时弃用。
  • 不带 new 实例化 REPL 弃用。
  • 不带 new 使用 Zlib 类弃用。
  • 向 child_process 的 spawn 和 execFile 传 args 弃用。

官方 codemod

针对 23/24 的破坏性变更或 EOL 弃用,官方提供了一批 codemod:

  • DEP0154:crypto 模块 generateKeyPair/generateKeyPairSync 对 'rsa-pss' 的 hash、mgf1Hash、saltLength 选项弃用,改用 hashAlgorithm、mgf1HashAlgorithm、saltLength。
  • dirent.path → dirent.parentPath。
  • fs 的 F_OK/R_OK/W_OK/X_OK getter 运行时弃用,改从 fs.constants 或 fs.promises.constants 取。
  • fs.truncate 与文件描述符一起用时弃用(DEP0081),改用 fs.ftruncate。
  • http2 priority 信令弃用,移除 http2.connect()、session.request()、stream.priority()、client.settings() 的 priority 相关选项/方法。
  • DEP0100 在 v23 达到 EOL,process.assert 被移除,改用 assert 模块。
  • createSecurePair() → TLSSocket()。

参考

复制全文 生成海报 Node.js 升级 后端

推荐文章

程序员茄子在线接单