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 Das 和 Isaac Jensen 为他们的初始原型工作,它作为灵感来源。
有关如何在 Keycloak 中尝试 FIPS 支持的说明,请 点击此处 查看。
BCFIPS 非批准模式中的已知限制包括
使用 SAML 客户端和 SAML 身份提供者时可能出现问题
Kerberos/SPNEGO 身份验证器无法工作
X.509 客户端证书身份验证可能无法为用户和客户端都工作
在 BCFIPS 批准模式(更严格的模式)下,存在更多限制,例如
用户密码必须至少为 14 个字符长。您应该为您的领域设置一个密码策略,要求至少 14 个字符,以避免用户注册/身份验证期间出现问题
密钥库/信任库必须为 bcfks
类型,因为 jks
和 pkcs12
均无法工作。这是 BCFIPS 批准模式的限制
启动时服务器日志中会出现一些警告