Envoy 在 Windows 上的 FIPS 支持现状:原因、官方立场与替代方案
【免费下载链接】envoyCloud-native high-performance edge/middle/service proxy项目地址: https://gitcode.com/GitHub_Trending/en/envoy
Envoy 是一款云原生高性能边缘/中间/服务代理,其 TLS 能力默认由 BoringSSL 提供。本文围绕官方 FAQ 中"Envoy 在 Windows 上是否支持 FIPS"这一问题,说明为什么 Windows 平台不提供 FIPS 模式、Envoy 项目当前的 Windows 官方支持状态,以及在受支持平台上构建 FIPS 版本 Envoy 的具体方法,帮助有合规需求的读者正确规划部署方案。
结论先行:Envoy 在 Windows 上不支持 FIPS
根据官方 FAQ 文档 win_fips_support.rst,答案是明确的:Envoy 在 Windows 上不提供 FIPS 支持。原因链可以概括为两点:
- BoringSSL 没有 Windows 上的 FIPS 模式。Envoy 使用 BoringSSL 作为其精简版 TLS 实现,而截至该文档编写时,BoringSSL 并不支持在 Windows 上启用 FIPS 模式。
- 由于默认 TLS 库在该平台上无法以 FIPS 模式运行,Envoy 自然也无法在 Windows 上提供 FIPS 能力。
此外,该 FAQ 顶部还嵌入了 Windows 支持状态声明(见下文"官方 Windows 支持状态"一节),进一步强化了这一结论的现实意义。
背景:为什么 Envoy 使用 BoringSSL
Envoy 的 SSL 库配置说明见 bazel/SSL.md:Envoy 默认使用BoringSSL作为 SSL 库,同时构建系统也支持将OpenSSL作为替代方案。BoringSSL 是 Google 维护的精简版 TLS 实现,Envoy 之所以默认选择它,是因为其精简的代码面、与 Chromium 生态对齐的安全修复节奏,以及静态链接带来的部署便利性。
由于默认 SSL 实现是 BoringSSL,Envoy 的 FIPS 能力就取决于 BoringSSL 自身在目标平台上的 FIPS 支持情况。这正是 Windows 上无法提供 FIPS 的根因所在。
技术佐证:Envoy 的 FIPS 构建被明确限定在 Linux
仓库中的 FIPS 构建脚本进一步印证了"FIPS 与 Windows 无关"的事实。查看 bazel/external/boringssl_fips.genrule_cmd,其开头的平台检查逻辑如下:
OS=$(uname) ARCH=$(uname -m) # This works only on Linux-x86_64 and Linux-aarch64. if [[ "$OS" != "Linux" || ("$ARCH" != "x86_64" && "$ARCH" != "aarch64") ]]; then echo "ERROR: BoringSSL FIPS is currently supported only on Linux-x86_64 and Linux-aarch64." >&2 exit 1 fi也就是说,Envoy 的 BoringSSL-FIPS 构建流程在构建期就硬性校验运行平台必须为Linux,且架构必须是x86_64 或 aarch64,其他平台(包括 Windows)会直接构建失败。该脚本内部完成了以下 FIPS 关键流程:
- 使用与 Envoy 其余部分相同的 LLVM 工具链,以
cmake -DFIPS=1方式编译 BoringSSL; - 构建完成后通过
bssl isfips校验产物确实处于 FIPS 模式(validate_fips函数要求输出必须为1); - 将编译产物
libcrypto.a与libssl.a输出到 Bazel 期望的路径,供 Envoy 静态链接。
这一脚本从构建体系层面确认:FIPS 支持是 Linux 平台的专属能力,Windows 既无 BoringSSL FIPS 支持,也无法通过 Envoy 构建脚本产出 FIPS 二进制。
官方 Windows 支持状态:2023 年已结束
FAQ 顶部嵌入的声明位于 docs/root/_include/windows_support_ended.rst,内容如下:
2023 年 8 月 31 日,Envoy 项目因资源不足结束了 Windows 的官方支持。项目仍会接受与 Windows 构建相关的补丁,但在另行通知之前,Windows 构建已被排除在 Envoy CI、发布流程和安全流程之外。
这对 FIPS 问题的现实影响是双重的:
- FIPS 需求本就无法在 Windows 上满足(BoringSSL 无 Windows FIPS 模式);
- 即使排除 FIPS,Windows 也已不再是官方支持平台,不在 Envoy 的安全与发布流程覆盖范围内。
因此,在 Windows 上运行 Envoy 并期望 FIPS 合规,在当前状态下既不可行也不被官方保障。FAQ 文档末尾也建议:如果 FIPS 是硬性需求,请联系 Envoy 贡献者社区沟通。
替代方案:在受支持的平台上启用 FIPS
如果你的 FIPS 需求真实存在,正确的路径是在官方支持的 Linux 平台上构建 FIPS 版本 Envoy,而不是停留在 Windows 上。
构建 BoringSSL-FIPS 版本
根据 bazel/SSL.md,在 Linux x86_64 或 aarch64 上执行:
bazel build --config=boringssl-fips //source/exe:envoy-static- 支持架构:Linux x86_64、aarch64;
- 版本标识:构建产物在
envoy --version中显示BoringSSL-FIPS。
Envoy 遵循 BoringSSL FIPS 的 Update Stream 策略:在创建稳定发布分支时,会固定一个与该策略兼容的 BoringSSL FIPS 版本,除非出现影响 Envoy 的 Bug 或安全漏洞,否则该版本及配套构建工具版本在发布分支上不会变更,这保证了合规基线的可复现性。
验证 FIPS 构建是否生效
构建完成后,通过版本输出来确认 SSL 库状态:
envoy --version输出中可关注以下标识:
BoringSSL-FIPS:FIPS 构建;BoringSSL:标准(非 FIPS)构建;OpenSSL:OpenSSL 构建。
关于 OpenSSL 方案的说明
如果必须在 FIPS 与特定平台之间权衡,还可以考虑 OpenSSL 构建(bazel build --config=openssl //source/exe:envoy-static)。需要明确的是:
- OpenSSL 的 FIPS 模式是在运行时通过 OpenSSL 和/或操作系统配置强制开启的,而非构建期特性;
- OpenSSL 构建支持 Linux x86_64、aarch64、ppc64le,其中 ppc64le 上没有 BoringSSL-FIPS,官方迁移指引正是在该架构上改用 OpenSSL;
- 注意 OpenSSL 构建下 HTTP/3(QUIC)会被禁用,且 Envoy 的 OpenSSL 构建目前不在 Envoy 安全策略的覆盖范围内。
无论哪种方式,这些方案都面向 Linux 平台,Windows 上均无 FIPS 出路。
小结
围绕"Envoy 在 Windows 上是否支持 FIPS"这一问题,可以得出如下完整结论:
| 问题 | 答案 |
|---|---|
| Envoy 在 Windows 上是否支持 FIPS? | 不支持 |
| 根本原因 | 默认 TLS 库 BoringSSL 在 Windows 上没有 FIPS 模式 |
| 构建体系证据 | boringssl_fips.genrule_cmd 仅允许 Linux x86_64 / aarch64 |
| Windows 官方支持状态 | 2023-08-31 起结束,不在 CI、发布与安全流程内 |
| 有 FIPS 需求怎么办 | 在 Linux x86_64 / aarch64 上用--config=boringssl-fips构建,或联系贡献者社区 |
对于有 FIPS 合规要求的用户,当前唯一可行的路线是:将 Envoy 部署到 Linux 平台并采用 BoringSSL-FIPS 构建,同时在升级前仔细核对 bazel/SSL.md 中的版本策略与架构限制,确保安全基线与合规审计的一致性。
【免费下载链接】envoyCloud-native high-performance edge/middle/service proxy项目地址: https://gitcode.com/GitHub_Trending/en/envoy
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考