當主機系統上提供受支援的 OpenSSL 程式庫和 FIPS 物件模組時,MySQL 支援 FIPS 模式。
伺服器端的 FIPS 模式適用於伺服器執行的密碼編譯操作。這包括在伺服器中執行的複寫(來源/複本和群組複寫)和 X 外掛程式。FIPS 模式也適用於用戶端嘗試連線至伺服器的情況。
下列章節描述 FIPS 模式,以及如何在 MySQL 中利用它
聯邦資訊處理標準 140-2 (FIPS 140-2) 描述了一種安全標準,聯邦(美國政府)機構可能會要求用於保護敏感或有價值資訊的密碼編譯模組。若要被視為可接受用於此類聯邦用途,密碼編譯模組必須通過 FIPS 140-2 認證。如果旨在保護敏感資料的系統缺乏適當的 FIPS 140-2 憑證,聯邦機構將無法購買它。
OpenSSL 等產品可以在 FIPS 模式下使用,儘管 OpenSSL 程式庫本身未經過 FIPS 驗證。相反地,OpenSSL 程式庫會與 OpenSSL FIPS 物件模組搭配使用,以使基於 OpenSSL 的應用程式能在 FIPS 模式下運作。
如需有關 FIPS 及其在 OpenSSL 中實作的相關資訊,下列參考資料可能會有所幫助
FIPS 模式對密碼編譯操作施加了條件,例如限制可接受的加密演算法或對較長金鑰長度的要求。對於 OpenSSL,確切的 FIPS 行為取決於 OpenSSL 版本。
若要讓 MySQL 支援 FIPS 模式,必須滿足以下系統需求
MySQL 必須使用通過 FIPS 認證可用的 OpenSSL 版本進行編譯。OpenSSL 1.0.2 和 OpenSSL 3.0 已通過認證,但 OpenSSL 1.1.1 未通過。最近版本的 MySQL 二進位發行版是在某些平台上使用 OpenSSL 3.0 編譯的,這表示它們未通過 FIPS 認證。這表示您有以下選項,具體取決於系統和 MySQL 設定
使用具有 OpenSSL 3.0 和所需 FIPS 物件模組的系統。在這種情況下,如果您使用使用 OpenSSL 3.0 編譯的二進位發行版,或使用 OpenSSL 3.0 從原始碼編譯 MySQL,則可以為 MySQL 啟用 FIPS 模式。
關於升級至 OpenSSL 3.0 的一般資訊,請參閱 OpenSSL 3.0 遷移指南。
使用具有 OpenSSL 1.1.1 或更高版本的系統。在這種情況下,您可以使用二進制套件安裝 MySQL,並且可以使用 TLS v1.3 協定和密碼套件,以及其他已支援的 TLS 協定。但是,您無法為 MySQL 啟用 FIPS 模式。
使用具有 OpenSSL 1.0.2 和所需 FIPS 物件模組的系統。在這種情況下,如果您使用使用 OpenSSL 1.0.2 編譯的二進制發行版,或從原始碼使用 OpenSSL 1.0.2 編譯 MySQL,則可以為 MySQL 啟用 FIPS 模式。在這種情況下,您無法使用 TLS v1.3 協定或密碼套件,這需要 OpenSSL 1.1.1 或 3.0。此外,您應該注意 OpenSSL 1.0.2 已於 2019 年終止支援,並且所有嵌入 OpenSSL 1.1.1 的作業平台將於 2024 年終止支援。
在執行階段,OpenSSL 程式庫和 OpenSSL FIPS 物件模組必須以共享(動態連結)物件的形式提供。
若要判斷 MySQL 是否在啟用 FIPS 模式的系統上執行,請使用 SQL 陳述式 (例如 SHOW VARIABLES LIKE '%fips%'
或 SELECT @@ssl_fips_mode
) 檢查 ssl_fips_mode
伺服器系統變數的值。如果此變數的值為 1 (ON
) 或 2 (STRICT
),則表示已為 OpenSSL 啟用 FIPS 模式;如果為 0 (OFF
),則表示 FIPS 模式不可用。
一般來說,STRICT
比 ON
施加更多限制,但 MySQL 本身除了指定 OpenSSL 的 FIPS 模式值外,沒有其他 FIPS 特定的程式碼。ON
或 STRICT
的 FIPS 模式確切行為取決於 OpenSSL 版本。如需詳細資訊,請參閱 fips_module
手冊頁(請參閱 FIPS 概觀)。
伺服器端的 FIPS 模式適用於伺服器執行的加密作業,包括 MySQL 複寫(包括群組複寫)和在伺服器內執行的 X Plugin 所執行的加密作業。
FIPS 模式也適用於用戶端嘗試連線至伺服器的情況。啟用時,無論是在用戶端還是伺服器端,它都會限制可以選擇哪些受支援的加密密碼。但是,啟用 FIPS 模式並不需要必須使用加密連線,或者必須加密使用者憑證。例如,如果啟用 FIPS 模式,則需要更強的加密演算法。尤其是,MD5 受限制,因此嘗試使用加密密碼 (例如 RC4-MD5
) 建立加密連線將無法運作。但 FIPS 模式並未阻止建立未加密的連線。(若要執行此操作,您可以使用 CREATE USER
或 ALTER USER
的 REQUIRE
子句,用於特定使用者帳戶,或設定 require_secure_transport
系統變數以影響所有帳戶。)
如果需要 FIPS 模式,建議使用包含它的作業平台;如果包含,您可以(並且應該)使用它。如果您的平台不包含 FIPS,則有兩個選項
移轉至具有 FIPS OpenSSL 支援的平台。
使用
fips_module
手冊頁中的說明,從原始碼建置 OpenSSL 程式庫和 FIPS 物件模組(請參閱 FIPS 概觀)。
如果 OpenSSL FIPS 物件模組不可用,則 ssl_fips_mode
和 --ssl-fips-mode
唯一允許的值為 OFF
。嘗試將 FIPS 模式設定為其他值時,會發生錯誤。
如果需要 FIPS 模式,建議使用包含它的作業平台;如果包含,您可以(並且應該)使用它。如果您的平台不包含 FIPS,則有兩個選項
移轉至具有 FIPS OpenSSL 支援的平台。
使用
fips_module
手冊頁中的說明,從原始碼建置 OpenSSL 程式庫和 FIPS 物件模組(請參閱 FIPS 概觀)。