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 的操作系统,您仍然可以尝试启用 FIPS 的 Keycloak 服务器,方法是使用自定义的 java.security
文件,其中仅配置了 BouncyCastle-FIPS 安全提供程序,如下面步骤 4 中的说明所述。
感谢 David Anderson,他贡献了此功能的部分内容。 还要感谢 Sudeep Das 和 Isaac Jensen 的初步原型工作,这为我们提供了灵感。
有关如何在 Keycloak 中尝试 FIPS 支持的说明请点击此处。
BCFIPS 非批准模式下的已知限制包括
使用 SAML 客户端和 SAML 身份提供程序时可能出现问题
Kerberos/SPNEGO 身份验证器不起作用
X.509 客户端证书身份验证可能对用户和客户端均不起作用
在 BCFIPS 批准模式(更严格的模式)下,存在更多限制,例如
用户密码必须至少 14 个字符长。您应该为您的 realm 设置密码策略为 14 个字符,以避免在用户注册/身份验证期间出现问题
密钥库/信任库的类型必须为 bcfks
,因为 jks
和 pkcs12
均不起作用。 这是 BCFIPS 批准模式的限制
启动时 server.log 中的一些警告