内容提要
Node.js 现在包含 OpenSSL 3.0,支持 QUIC 和 FIPS 模块。虽然与 OpenSSL 1.1.1 兼容,但某些算法和密钥大小的限制更严格。遇到 ERR_OSSL_EVP_UNSUPPORTED 错误时,可使用 --openssl-legacy-provider 选项作为临时解决方案。此外,V8 JavaScript 引擎更新至 V8 9.5,增加了对 Intl.DisplayNames API 的支持。
延伸解读
OpenSSL 3.0 升级带来的兼容性挑战
Node.js 17 将 OpenSSL 升级到 3.0,虽然 API 与 1.1.1 基本兼容,但对算法和密钥大小的限制更严格。这可能导致依赖旧算法的应用或模块出现 ERR_OSSL_EVP_UNSUPPORTED 错误。开发者需检查依赖项,并考虑使用 --openssl-legacy-provider 作为临时解决方案,但长期应更新代码以符合新标准。
V8 9.5 引擎的国际化增强
V8 更新至 9.5 版本,为 Intl.DisplayNames API 增加了更多支持类型,并扩展了 Intl.DateTimeFormat 的 timeZoneName 选项。这些改进让开发者能更灵活地处理国际化显示,例如语言、地区名称和时区格式,提升多语言应用的本地化体验。
QUIC 与 FIPS 支持的意义
通过集成 quictls/openssl,Node.js 17 提供了 QUIC 协议支持,为未来 HTTP/3 等应用奠定基础。同时,OpenSSL 3.0 的新 FIPS 模块恢复了 FIPS 合规能力,满足金融、政府等对加密标准有严格要求的场景。构建 FIPS 版本需参考 BUILDING.md。
Q&A
Node.js 17.0.0 新增了哪些主要功能?
Node.js 17.0.0 新增了 OpenSSL 3.0,支持 QUIC 和 FIPS 模块,并更新了 V8 JavaScript 引擎至 V8 9.5。
OpenSSL 3.0 对算法和密钥大小有什么限制?
OpenSSL 3.0 对算法和密钥大小的限制更严格,可能会影响生态系统。
如何解决 ERR_OSSL_EVP_UNSUPPORTED 错误?
可以使用 --openssl-legacy-provider 选项作为临时解决方案来解决 ERR_OSSL_EVP_UNSUPPORTED 错误。
V8 9.5 引擎更新了哪些新特性?
V8 9.5 引擎增加了对 Intl.DisplayNames API 的支持和扩展的时区名称选项。
Node.js 17.0.0 是否兼容旧版本的 OpenSSL?
Node.js 17.0.0 与 OpenSSL 1.1.1 兼容,但某些算法和密钥大小的限制更严格。
Node.js 17.0.0 的 FIPS 支持如何实现?
Node.js 17.0.0 通过 OpenSSL 3.0 的新 FIPS 模块提供 FIPS 支持。