FIPS 140-2 实验性支持

2022 年 11 月 16 日 作者:Marek Posolda

我们很高兴地宣布最新的 Keycloak 20 版本包含对 FIPS 140-2 的实验性支持!

FIPS 140-2 标准 是针对密码模块的一组要求,美国政府及其相关方使用的软件需要满足这些要求。符合 FIPS 的软件应仅使用 FIPS 规范允许的安全密码算法,并且必须以安全的方式使用它们。Keycloak 不直接实现任何密码算法,但它在内部需要使用大量的密码功能。为此,Keycloak 主要依赖于 Java 密码 SPI 和第三方库来实现与密码相关的功能,尤其是 BouncyCastle 库

FIPS 支持通常在操作系统级别启用。例如,在安装 RHEL 8.6 时,您可以在操作系统安装期间启用内核标志以确保您的操作系统符合 FIPS。当在操作系统级别启用 FIPS 时,这意味着包括 OpenJDK 在内的各种软件包也将被设置为符合 FIPS,并预先配置为依赖于 FIPS 认可的功能。例如,java.security 配置文件预先配置为仅包含符合 FIPS 的安全提供程序。

Keycloak 中的 FIPS 支持意味着 Keycloak 服务器可以在符合 FIPS 的操作系统上与符合 FIPS 的 Java 一起运行。这也意味着 Keycloak 服务器符合 FIPS,可以被严格要求 FIPS 140-2 支持的各方使用。即使您不使用启用 FIPS 的操作系统,您仍然可以通过使用仅配置了 BouncyCastle-FIPS 安全提供程序的自定义 java.security 文件来尝试启用 FIPS 的 Keycloak 服务器,如下面的步骤 4 中的说明。

感谢 David Anderson 为此功能贡献了部分内容。另外,感谢 Sudeep DasIsaac Jensen 为他们的初始原型工作,它作为灵感来源。

说明

有关如何在 Keycloak 中尝试 FIPS 支持的说明,请 点击此处 查看。

结论

我们很乐意您尝试 Keycloak FIPS 集成并分享您的 反馈!您也可以报告任何 错误

BCFIPS 非批准模式中的已知限制包括

  • 使用 SAML 客户端和 SAML 身份提供者时可能出现问题

  • Kerberos/SPNEGO 身份验证器无法工作

  • X.509 客户端证书身份验证可能无法为用户和客户端都工作

在 BCFIPS 批准模式(更严格的模式)下,存在更多限制,例如

  • 用户密码必须至少为 14 个字符长。您应该为您的领域设置一个密码策略,要求至少 14 个字符,以避免用户注册/身份验证期间出现问题

  • 密钥库/信任库必须为 bcfks 类型,因为 jkspkcs12 均无法工作。这是 BCFIPS 批准模式的限制

  • 启动时服务器日志中会出现一些警告