ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Node.js 0.12.12(LTS)发布解读:彻底移除 SSLv2 支持与 DROWN 攻击防御

Node.js 0.12.12(LTS)发布解读:彻底移除 SSLv2 支持与 DROWN 攻击防御 Node.js 0.12.12LTS发布解读彻底移除 SSLv2 支持与 DROWN 攻击防御【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org本文基于 nodejs.org 官方博客中 Node.js 0.12.12 (LTS) 发布公告 展开全面梳理该版本唯一的核心变更——完全移除 SSLv2 协议支持并追溯 SSLv2 从默认禁用到彻底移除的完整历史脉络同时给出全平台下载清单、SHA256/SHA512 校验和验证方法。读完本文你将掌握 DROWN 攻击的原理与影响面、Node.js 0.12 系列如何一步步淘汰 SSLv2以及如何在生产环境安全地升级 LTS 版本并核验二进制完整性。一、版本概况一个 LTS 版本一个安全焦点Node.js 0.12.12 发布于 2016 年 3 月 9 日见 发布公告属于 0.12 系列的 LTS长期支持版本由当时的核心维护者 Rod Vagg 署名发布博客分类为release。该版本没有新增功能特性全部焦点集中在 openssl 相关的安全变更上openssl完全移除 SSLv2 支持--enable-ssl2命令行参数现在会产生错误。DROWN 攻击drownattack.com会在服务器启用 SSLv2 时制造漏洞——即使客户端连接并未使用 SSLv2 协议本身。SSLv2 协议被广泛认为已损坏到不可接受的程度不应再被支持。这一变更与 Node.js 0.10.43Maintenance发布公告 中记录的 SSLv2 移除PR #5529属同一批安全加固动作两条仍在维护的旧版线在 2016 年 3 月初相继完成对 SSLv2 的彻底清除。二、为什么要移除 SSLv2DROWN 攻击详解2.1 攻击原理服务器端后门式降级DROWNDecrypting RSA with Obsolete and Weakened eNcryption攻击是 2016 年 3 月公开披露的一类严重 TLS 漏洞对应 OpenSSL 公告 2016-0800。它的核心危害在于即使你的服务器只使用现代 TLS 协议如 TLS 1.2与客户端通信只要同一台服务器或同一台主机上共享同一 RSA 密钥的服务同时启用了 SSLv2攻击者就可以利用 SSLv2 的弱加密导出密码套件export-grade ciphers对 RSA 私钥发起离线破解攻击SSLv2 协议本身早已被公认为不可接受的损坏unacceptably broken它使用弱密钥交换、存在 Bleichenbacher oracle 等设计缺陷私钥一旦被 DROWN 破解攻击者即可解密所有被截获的 TLS 流量。因此移除 SSLv2 并让--enable-ssl2直接报错是从根上堵死服务器无意中残留 SSLv2 能力这一攻击面。2.2 时间线补充0.12.11 的前奏发布公告特别补充了一段重要说明注意Node.js 0.12.11 中升级到 OpenSSL 1.0.1s 时已经从内部移除了 SSLv2 支持。本次0.12.12的变更原本打算放在 v0.12.11 中发布。--enable-ssl2命令行参数现在会产生错误而不再是一个 no-op空操作。这段话揭示了两个关键实现细节0.12.11 的 SSLv2 移除是内部的在 v0.12.11 发布公告 中可以看到OpenSSL 从 1.0.1r 升级到 1.0.1s该升级本身已移除内部 SSLv2 支持但此时--enable-ssl2参数仍被接受只是不生效即 no-op0.12.12 的变更是行为层的将--enable-ssl2从 no-op 改为直接报错确保任何依赖该参数启用 SSLv2 的部署立即暴露问题而不是静默失效。2.3 对应提交发布公告列出的唯一代码提交为dbfc9d9241—crypto,tls移除 SSLv2 支持Ben Noordhuisnodejs/node#5536同一批改动中还包括文档同步v0.12.11 已包含 doc: remove SSLv2 descriptionsShigeki Ohtsu, PR #5541确保官方 API 文档不再描述已被移除的 SSLv2 用法。三、SSLv2 在 Node.js 中的演进从默认禁用到彻底移除要理解 0.12.12 的意义需要回看 SSLv2 在 Node.js 中的完整生命周期。仓库中的历史发布公告提供了清晰的时间线版本时间SSLv2 状态v0.4.92011 年前后提供禁用 SSLv2的编译选项见 v0.4.9 公告v0.10.33Stable2014-10-23因 POODLE 漏洞默认禁用SSLv2/SSLv3但可用--enable-ssl2/--enable-ssl3重新开启见 v0.10.33 公告v0.11.62014 年末build 阶段默认禁用 SSLv2见 v0.11.6 公告v0.12.11LTS2016-03-03随 OpenSSL 1.0.1s 升级内部移除 SSLv2 支持见 v0.12.11 公告v0.12.12LTS2016-03-09完全移除--enable-ssl2直接报错v0.10.43Maintenance2016-03-04与 0.12.12 同步完成 SSLv2 移除见 v0.10.43 公告3.1 从 v0.10.33 看禁用但不移除时期的妥协v0.10.33 发布公告 对当时的设计做了非常详细的说明是理解 0.12.12 变更动机的最佳背景默认协议协商方式为SSLv23_method更准确地说是自动协商从最高协议版本向下协商为提供安全默认值Node.js 自 v0.10.33 起通过secureOptions显式设置SSL_OP_NO_SSLv3 | SSL_OP_NO_SSLv2禁用这两个协议但仍保留两个逃生通道--enable-ssl2/--enable-ssl3命令行参数以及显式指定secureProtocol为SSLv2_method/SSLv3_method公告同时坦承这些逃生通道是为了兼容 IE6 等遗留客户端/服务端并预言在未来版本的 Node.js 中SSLv2 和 SSLv3 将默认不编译进去。0.12.12 正是兑现这一预言的节点——SSLv2 从默认禁用但可显式开启转变为完全不存在。3.2 2016 年 2 月安全发布中的铺垫在 February 2016 Security Release Summary 中官方已就 OpenSSL 相关漏洞给出影响评估SSLv2 doesnt block disabled ciphers (CVE-2015-3197)Node.js v0.10 和 v0.12 默认禁用 SSLv2除非使用了--enable-ssl2命令行参数不推荐。 Node.js v4 和 v5 不支持 SSLv2。也就是说在 0.12.12 之前0.10/0.12 线的 SSLv2 是否暴露完全取决于部署者是否显式传入--enable-ssl2。0.12.12 通过让该参数报错彻底消除了这种可选暴露的风险。四、变更影响与升级建议4.1 对普通用户无感对绝大多数未使用--enable-ssl2的 Node.js 0.12 用户本次变更是透明的TLS 1.0/1.1/1.2 等现代协议不受影响tls与crypto模块的日常用法HTTPS 服务器/客户端、证书处理无需任何代码改动。4.2 对使用了--enable-ssl2的用户必须迁移如果启动命令中包含--enable-ssl2升级到 0.12.12 后进程将直接报错退出。需要从启动脚本/进程管理器配置中移除--enable-ssl2参数若依赖 SSLv2 与遗留客户端互通应评估改用 TLS 1.0 并升级客户端而不是继续使用已被 DROWN 击穿的协议检查代码中是否显式设置了secureProtocol: SSLv2_method如有则必须移除该路径在 v0.10.33 时期即被官方标注为不推荐。4.3 与 v4/v5 线的关系如 February 2016 Security Release Summary 所述Node.js v4 和 v5 从一开始就不支持 SSLv2因此该变更仅影响仍在维护的旧版线 v0.10 与 v0.12。这也体现了 LTS 策略的实践旧版线通过 patch 级安全更新获得与新版线一致的安全基线。五、下载清单与校验和验证发布公告附带了完整的平台下载清单。0.12.12 覆盖 Windows、macOS、Linux、SmartOS 四类平台并提供 32/64 位二进制、源码包等形态平台安装包 / 二进制Windows 32-bitInstaller:node-v0.12.12-x86.msiBinary:node.exeWindows 64-bitInstaller:x64/node-v0.12.12-x64.msiBinary:x64/node.exemacOS Universalnode-v0.12.12.pkgmacOS 64/32-bitnode-v0.12.12-darwin-x64.tar.gz/node-v0.12.12-darwin-x86.tar.gzLinux 64/32-bitnode-v0.12.12-linux-x64.tar.gz/node-v0.12.12-linux-x86.tar.gzSmartOS 64/32-bitnode-v0.12.12-sunos-x64.tar.gz/node-v0.12.12-sunos-x86.tar.gz源码node-v0.12.12.tar.gz所有文件均可从https://nodejs.org/dist/v0.12.12/目录获取API 文档位于https://nodejs.org/docs/v0.12.12/api/。5.1 校验和GPG 签名 SHA256 双保险发布公告明确指出该校验和文件的签名策略ShasumsGPG 签名哈希SHA512文件哈希SHA256即发布者使用 GPG 私钥对哈希文件做签名签名哈希用 SHA512而每个发行文件本身的完整性由 SHA256 保证。公告内的校验块以-----BEGIN PGP SIGNED MESSAGE-----开头、以-----END PGP SIGNATURE-----结尾内含所有发行文件的 SHA256 哈希值与 GPG 签名例如61e4c176fd882498778b1a3907a5fe5c9e95e6cc8438b0d053d953aed3620273 node-v0.12.12.tar.gz a3d51cc26060fe46f9ebe69c750b20fe1f6f27a936db6046a73b8a9715bf3559 node-v0.12.12-linux-x64.tar.gz 9fbad4381435c36c812ebe9b1a0e5a127578f15166575b5e0deb93e03ca47c55 node.lib5.2 如何在下载后验证当前 nodejs.org 网站的下载实现见 下载归档页同样引导用户使用签名的 SHASUMS 文件SHASUMS256.txt.asc来验证发行文件该路径由 apps/site/util/url.ts 中的getNodeDownloadUrl工具统一构造。验证流程如下# 1. 下载发行文件与对应的签名校验文件 curl -O https://nodejs.org/dist/v0.12.12/node-v0.12.12-linux-x64.tar.gz curl -O https://nodejs.org/dist/v0.12.12/SHASUMS256.txt.asc # 2. 用 GPG 验证校验文件的签名需先导入 Node.js 发布密钥 gpg --verify SHASUMS256.txt.asc # 3. 校验发行文件的 SHA256 是否与签名文件中一致 grep node-v0.12.12-linux-x64.tar.gz SHASUMS256.txt.asc | sha256sum -c -只有签名验证通过、且 SHA256 一致时才能确认下载的二进制未被篡改、确实出自官方发布流程。六、发布公告的格式规范从模板看 0.12.12 的结构0.12.12 公告的排版并非偶然它遵循了 nodejs.org 仓库中的发布模板 apps/site/scripts/release-post/template.hbs前置元数据front matterdate、category: release、title含{{version}}与{{versionPolicy}}如 Node.js 0.12.12 (LTS)、layout: blog-post、author正文按Notable changes重点变更→ Commits提交列表→ 下载文件列表 → SHASUMS 校验块的顺序组织。该模板由 apps/site/scripts/release-post/index.mjs 驱动用于为每个新版本生成格式统一的发布公告。理解这一模板结构有助于你在翻阅其他版本公告如 v0.12.11、v0.10.43时快速定位变更说明、提交、下载与校验四类信息。七、小结Node.js 0.12.12LTS以一次聚焦的安全变更完成了对 SSLv2 的最终清除变更内容--enable-ssl2由 no-op 改为直接报错SSLv2 支持被完全移除提交dbfc9d9241PR #5536安全背景DROWN 攻击OpenSSL 2016-0800利用服务器端残留的 SSLv2 能力破解 RSA 私钥即使客户端并未使用 SSLv2历史脉络从 v0.10.33 的默认禁用、可显式开启到 0.12.11 的内部移除再到 0.12.12 的行为层彻底移除升级要点普通用户可平滑升级曾使用--enable-ssl2或secureProtocol: SSLv2_method的部署需先清理相关配置发布实践通过 GPG 签名的 SHASUMS256 文件SHA256 哈希 SHA512 签名验证下载完整性是官方推荐的校验方式。对于仍在维护旧版 Node.js 生产环境的团队0.12.12 的这次变更是一个典型的安全升级范本理解漏洞原理、核对发布公告、验证二进制签名、再执行滚动升级。延伸阅读均来自本仓库可继续深入February 2016 Security Release Summary2016 年 2 月安全发布对 CVE-2015-3197、CVE-2016-0701、Logjam 等的影响评估v0.12.11 (LTS) 发布公告SSLv2 内部移除与 OpenSSL 1.0.1s 升级详情v0.10.33 (Stable) 发布公告POODLE 之后默认禁用 SSLv2/SSLv3的原始设计v0.10.43 (Maintenance) 发布公告v0.10 线同步完成的 SSLv2 移除。【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表