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 的作業系統,您仍然可以嘗試啟用 FIPS 的 Keycloak 伺服器,方法是使用自訂的 java.security 檔案,其中僅設定 BouncyCastle-FIPS 安全供應商,如下方步驟 4 中的說明。

感謝 David Anderson 貢獻此功能的部分程式碼。同時,感謝 Sudeep DasIsaac Jensen 最初的原型開發,它們為我們提供了靈感。

操作說明

關於如何在 Keycloak 中嘗試 FIPS 支援的操作說明,請參考這裡

結論

我們很高興您能嘗試 Keycloak FIPS 整合,並分享您的意見回饋!您也可以回報任何錯誤

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

  • 使用 SAML 用戶端和 SAML 身分提供者時可能出現問題

  • Kerberos/SPNEGO 驗證器無法運作

  • X.509 用戶端憑證驗證可能對使用者和用戶端都無法運作

在 BCFIPS 核准模式(更嚴格的模式)下,存在更多限制,例如:

  • 使用者密碼至少需要 14 個字元長。您應該為您的 realm 設定密碼策略為 14 個字元,以避免使用者註冊/驗證期間出現問題

  • 金鑰儲存區/信任儲存區的類型必須為 bcfks,因為 jkspkcs12 都不起作用。這是 BCFIPS 核准模式的限制

  • 在啟動時,server.log 中會出現一些警告