 发布解析:ML-DSA 后量子签名、系统 CA 信任与 zstd 字典支持)
Node.js v24.6.0 (Current) 发布解析ML-DSA 后量子签名、系统 CA 信任与 zstd 字典支持【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org导读本文以 Node.js 官方网站在 2025 年 8 月 14 日发布的 v24.6.0 (Current) 版本说明为蓝本逐项拆解本版本引入的 6 项重要变更Notable Changes覆盖 CLI、crypto、zlib、http、fs 等核心模块。读完本文你将理解每一项新特性的适用场景与用法掌握该发布说明在 nodejs.org 仓库中的生成机制与校验方法并能通过 SHASUMS 与 PGP 签名独立验证下载文件的安全性。版本概览与发布状态发布日期2025-08-14版本号24.6.0Current非 LTS发布人RafaelGSSRafael Gonzaga仓库路径apps/site/pages/en/blog/release/v24.6.0.md根据仓库的发布数据处理逻辑releaseData.mjs一个主版本只有在进入 LTS 阶段后才被标记为LTS否则状态为Current。v24.6.0 属于 Node.js 24 发布线的常规更新因此标注为 Current适合尝鲜与生产前验证而追求长期稳定性的用户应关注已进入 LTS 的版本。本版本共包含约 80 条提交涉及 cli、crypto、zlib、http、fs、worker、test_runner、node-api 等多个模块其中6 项 Notable Changes 中有 5 项为 SEMVER-MINOR向后兼容的新功能另外 1 项为文档层面的弃用声明。Notable Changes 详解1. cli新增 NODE_USE_SYSTEM_CA1 环境变量cli: add NODE_USE_SYSTEM_CA1 (Joyee Cheung) #59276这是本版本最值得关注的企业级特性之一。设置环境变量NODE_USE_SYSTEM_CA1后Node.js 将改用操作系统自带的根证书存储system root store来验证 TLS 对端证书而不是默认内置的 Mozilla CA 证书包。适用场景企业内网环境中公司内部 CA 签发的证书默认不被 Node.js 信任需要手动拼接NODE_EXTRA_CA_CERTS需要与系统级证书管理策略如 macOS Keychain、Windows 证书存储保持一致的部署环境。使用方式# Linux / macOS NODE_USE_SYSTEM_CA1 node app.js # Windows PowerShell $env:NODE_USE_SYSTEM_CA1 node app.js从源码提交记录看deps: update ada to 3.2.7、deps: upgrade openssl sources to openssl-3.5.2均在本版本合入该特性与 OpenSSL 3.5.2 的系统证书加载能力直接相关。当依赖企业内部 CA 签发证书的服务时该变量可以显著简化 TLS 信任配置若未设置此变量行为与之前版本保持一致继续使用内置 CA 包。2. crypto支持 ML-DSA 后量子数字签名crypto: support ML-DSA KeyObject, sign, and verify (Filip Skokan) #59259v24.6.0 在crypto模块中引入了对ML-DSAModule-Lattice Digital Signature Algorithm的 KeyObject 创建、签名与验签支持。ML-DSA 是美国 NIST 于 2024 年正式标准化的后量子密码学数字签名算法FIPS 204其安全性基于格lattice上的困难问题被认为是抗量子计算攻击的签名方案。本版本同时配套了以下相关工作crypto: prepare webcrypto key import/export for modern algorithms#59284——为 WebCrypto 的现代算法导入/导出做准备doc: rename x509.extKeyUsage to x509.keyUsage#59332——x509 文档属性更名。典型用法基于crypto模块的标准签名/验签 APIconst { generateKeyPairSync, sign, verify } require(node:crypto); // 生成 ML-DSA 密钥对 const { publicKey, privateKey } generateKeyPairSync(ml-dsa-65, { modulusLength: 2560, // 与算法实现相关的密钥参数 }); const data Buffer.from(post-quantum message); // 签名 const signature sign(null, data, privateKey); // 验签 const isValid verify(null, data, publicKey, signature); console.log(signature valid:, isValid);说明generateKeyPairSync的具体算法名与参数在不同 Node.js 版本中可能不同请以实际运行环境crypto.getCiphers()、crypto.getHashes()之外的相关能力查询接口输出为准。ML-DSA 的意义在于为需要长期保密的数据如数字证书、代码签名、TLS 会话提前布局抗量子安全。3. zlibzstd 压缩/解压新增字典支持zlib: add dictionary support to zstdCompress and zstdDecompress (lluisemper) #59240zstdZstandard是 Facebook 开源的快速压缩算法。v24.6.0 为zlib.zstdCompress()与zlib.zstdDecompress()增加了**字典dictionary**支持。字典压缩的核心思想是对于大量结构相似的小数据如 JSON 响应、日志行预训练一个共享字典可以显著提升压缩率。新的dictionary参数允许传入Buffer、TypedArray或DataViewconst { zstdCompressSync, zstdDecompressSync } require(node:zlib); // 假设 dict 是预先训练的共享字典Buffer const dict Buffer.from(...shared dictionary data...); const compressed zstdCompressSync(JSON.stringify(payload), { dictionary: dict, }); const decompressed zstdDecompressSync(compressed, { dictionary: dict, });该 API 与 Node.js 内置 zlib 其他算法如deflateRawSync的dictionary选项的使用习惯保持一致便于在有大量相似小数据包的业务场景中直接迁移。4. http新增 server.keepAliveTimeoutBuffer 选项http: add server.keepAliveTimeoutBuffer option (Haram Jeong) #59243http.Server在 v24.6.0 中新增了keepAliveTimeoutBuffer选项。它是对既有keepAliveTimeout默认 5 秒即保持连接的空闲超时的补充用于为 keep-alive 连接的超时判定提供一段缓冲时间const http require(node:http); const server http.createServer((req, res) { res.end(hello); }); server.keepAliveTimeout 5000; server.keepAliveTimeoutBuffer 1000; // 新增缓冲选项 server.listen(3000);该选项适合需要对慢速客户端或网络抖动更宽容的高并发服务避免连接被过早判定为超时而关闭。同版本还合入了doc: fix missing reference links for server.keepAliveTimeoutBuffer#59356为其文档补齐了引用链接。5. fs将 SonicBoom 移植为 fs.Utf8Streamfs: port SonicBoom module to fs module as Utf8Stream (James M Snell) #58897v24.6.0 将 pino 生态中著名的SonicBoom超高速日志写入器移植进fs模块作为Utf8Stream暴露。SonicBoom 的核心优化在于绕过 Node.js 常规的可写流开销以更低的系统调用次数完成 UTF-8 文本的同步/异步写入常用于日志系统的吞吐瓶颈优化。由于Utf8Stream是新增 API具体构造函数参数与用法应以对应版本的官方 API 文档为准从提交性质SEMVER-MINOR与移植背景可以确认其设计目标是为fs提供一条面向高吞吐文本写入的专用流实现。6. lib文档层面弃用http*lib: docs deprecate _http_* (Sebastian Beltran) #59293本变更并非移除功能而是在文档层面标记_http_*内部模块如_http_server、_http_client为弃用。这类以下划线开头的模块属于 Node.js 内部实现细节从未承诺公共 API 稳定性。官方建议不要直接require(_http_server)等内部模块应使用公开的node:http、node:https模块若你的代码仍在依赖内部模块请尽快迁移未来版本可能移除。其他值得关注的提交除上述 Notable Changes 外v24.6.0 还有一批对性能与可用性有实际影响的变更模块变更说明depsupgrade openssl sources to openssl-3.5.2随系统 CA 支持一并升级的 OpenSSL 版本depsupdate undici to 7.13.0HTTP 客户端底层实现更新depsupdate sqlite to 3.50.4内置 SQLite 版本更新srcadd percentage support to --max-old-space-size--max-old-space-size现支持百分比写法如--max-old-space-size75%libadd trace-sigint APIs新增 SIGINT 追踪相关 APIworkeradd cpuUsage for workerWorker 线程新增cpuUsage统计workeradd name for workerWorker 支持命名便于调试与日志fsfix glob TypeError on restricted dirs修复受限目录下 glob 抛 TypeError 的问题http2set Http2Stream#sentHeaders for raw headers修复 HTTP/2 原始请求头场景其中--max-old-space-size的百分比支持#59082来自 V8 堆配置解析层的改动对于按物理内存比例动态分配堆上限的容器部署非常实用。如何安装与验证 v24.6.0下载清单v24.6.0 的官方下载文件覆盖主要平台完整列表见 v24.6.0.md平台文件Windows 64-bit Installernode-v24.6.0-x64.msiWindows ARM 64-bit Installernode-v24.6.0-arm64.msiWindows 64-bit Binarywin-x64/node.exemacOS Installernode-v24.6.0.pkgmacOS Apple Silicon Binarynode-v24.6.0-darwin-arm64.tar.gzmacOS Intel Binarynode-v24.6.0-darwin-x64.tar.gzLinux 64-bit Binarynode-v24.6.0-linux-x64.tar.xzLinux PPC LE / s390x / ARMv8对应 linux-ppc64le / linux-s390x / linux-arm64 压缩包AIX 64-bit Binarynode-v24.6.0-aix-ppc64.tar.gzSource Codenode-v24.6.0.tar.gz值得注意的是v24.6.0 的下载清单中不再包含 Windows 32-bit 与 ARMv7 产物。这与仓库中下载清单生成脚本的过滤规则一致downloadsTable.mjs对于 23.0.0的版本移除 Windows 32-bit Installer/Binary对于 24.0.0的版本移除 ARMv7 32-bit Binary。也就是说从 Node.js 24 开始32 位 ARM 与 Windows 32 位支持已不再提供官方二进制。使用 SHASUMS 校验完整性发布说明末尾提供了带 PGP 签名的 SHASUMS 块v24.6.0.md包含所有产物的 SHA256 哈希。标准校验流程# 1. 下载发布说明中的 SHASUMS256.txt.asc或从文档复制 # 2. 校验 PGP 签名确认来自 Node.js 发布团队 gpg --verify SHASUMS256.txt.asc # 3. 本地计算下载文件的 SHA256 并比对 sha256sum node-v24.6.0-linux-x64.tar.xz # 输出应与 SHASUMS 中对应行一致例如 # fda6f6a00759eea0a27e34fcdfdd09c2b0413855edaa7f746246cf81c0186e26 node-v24.6.0-linux-x64.tar.xzPGP 签名的意义在于即使发布说明被篡改签名校验也能发现异常确保你下载的哈希与 Node.js 官方发布的内容一致。若哈希不匹配说明下载文件已损坏或被替换应立即停止使用。发布说明在 nodejs.org 仓库中的生成与渲染链路本仓库nodejs.org本身承载了这份发布说明的发布与渲染。理解其机制有助于读者看懂发布说明的结构从何而来。发布帖的自动生成脚本仓库提供了半自动化的发布帖生成器scripts/release-post/index.mjs。其工作流程为通过https://nodejs.org/dist/index.json获取最新版本号也可通过位置参数显式指定版本例如node index.mjs 24.6.0从 Node.js 主仓库的 changelog 提取该版本的变更段落fetchChangelog使用正则匹配a id24.6.0/a之后的完整小节从 changelog 头部正则解析发布作者findAuthorLogin并通过 GitHub API 获取作者显示名从https://nodejs.org/dist/v24.6.0/SHASUMS256.txt.asc拉取签名哈希fetchShasums失败时占位[INSERT SHASUMS HERE]对下载清单逐项发起 HEAD 请求验证产物是否已上线verifyDownloads未上线则标注*Coming soon*使用 template.hbs 渲染、prettier 格式化后写入pages/en/blog/release/v24.6.0.md。这解释了发布说明的固定结构frontmatterdate/category/title/layout/author changelog 变更列表 下载清单 SHASUMS 块。文档中标题Node.js 24.6.0 (Current)的(Current)即由 changelog 中的版本策略解析而来。博客索引与渲染构建期blog-data/generate.mjs 使用 gray-matter 逐行读取博客 frontmatter将category: release归类到release、year-2025、all三个分类并以/blog/release/v24-6-0作为 slug博客列表按日期倒序排列posts.sort((a, b) b.date.getTime() - a.date.getTime())每页展示 6 篇BLOG_POSTS_PER_PAGE 6见 next.constants.mjs分页逻辑位于 util/blog.ts页面渲染由 layouts/Post.tsx 完成渲染文章标题、作者信息与正文并在正文下方展示同分类的关联文章WithBlogCrossLinksMDX 渲染层mdx/components.mjs将a、pre等元素替换为站点定制的Link与MDXCodeBox组件因此发布说明中的下载链接与代码块在站点上会以统一样式呈现。升级建议尝鲜新特性ML-DSA、zstd 字典、NODE_USE_SYSTEM_CA1均为向后兼容的新增能力现有代码无需改动即可平滑升级企业 TLS 环境优先评估NODE_USE_SYSTEM_CA1能否替代NODE_EXTRA_CA_CERTS的拼接方案弃用清理检查代码中是否有_http_*内部模块引用尽早替换为公开 API平台注意若你仍在 32 位 Windows 或 ARMv7 环境运行v24.x 已不提供官方二进制需规划迁移如使用 Node.js 22 LTS 或对应平台的容器方案。小结Node.js v24.6.0 是一次功能密度较高的 Current 版本更新后量子签名算法 ML-DSA 的落地标志着 Node.js 在密码学前沿的跟进NODE_USE_SYSTEM_CA1解决了长期困扰企业内网 TLS 信任配置的痛点zstd 字典与fs.Utf8Stream则为压缩与日志写入提供了新的性能选项。配合发布说明中完整的提交列表与 PGP 签名的 SHASUMS开发者既可以安全地升级验证也可以对照 release-post 生成脚本 理解版本发布流程的自动化细节。【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考