文档主页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  安全  /  FIPS 支持

8.8 FIPS 支持

当主机系统上提供受支持的 OpenSSL 库和 FIPS 对象模块时,MySQL 支持 FIPS 模式。

服务器端的 FIPS 模式适用于服务器执行的加密操作。这包括在服务器内运行的复制(源/副本和组复制)和 X 插件。FIPS 模式也适用于客户端尝试连接到服务器。

以下部分描述了 FIPS 模式以及如何在 MySQL 中利用它。

FIPS 概述

联邦信息处理标准 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 模式,必须满足以下系统要求:

  1. 必须使用经过认证可与 FIPS 一起使用的 OpenSSL 版本编译 MySQL。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 协议之外,您还可以使用 TLS v1.3 协议和密码套件。但是,您不能为 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 年达到生命周期终止状态。

  2. 在运行时,OpenSSL 库和 OpenSSL FIPS 对象模块必须作为共享(动态链接)对象可用。

在 MySQL 中启用 FIPS 模式

要确定 MySQL 是否在启用了 FIPS 模式的系统上运行,请使用 SQL 语句(例如 SHOW VARIABLES LIKE '%fips%'SELECT @@ssl_fips_mode)检查 ssl_fips_mode 服务器系统变量的值。如果此变量的值为 1 (ON) 或 2 (STRICT),则为 OpenSSL 启用了 FIPS 模式;如果为 0 (OFF),则 FIPS 模式不可用。

重要

通常,STRICTON 强制执行更多限制,但除了向 OpenSSL 指定 FIPS 模式值外,MySQL 本身没有其他特定于 FIPS 的代码。ONSTRICT 的 FIPS 模式的确切行为取决于 OpenSSL 版本。有关详细信息,请参阅 fips_module 联机帮助页(请参阅FIPS 概述)。

服务器端的 FIPS 模式适用于服务器执行的加密操作,包括 MySQL Replication(包括组复制)和在服务器内运行的 X Plugin 执行的操作。

FIPS 模式也适用于客户端尝试连接到服务器的操作。在客户端或服务器端启用 FIPS 模式后,它会限制可以选择哪些受支持的加密密码。但是,启用 FIPS 模式并不要求必须使用加密连接,也不要求必须对用户凭据进行加密。例如,如果启用了 FIPS 模式,则需要更强的加密算法。特别是,MD5 受限,因此尝试使用 RC4-MD5 等加密密码建立加密连接将不起作用。但是 FIPS 模式并没有阻止建立未加密连接。(为此,您可以对特定用户帐户使用 CREATE USERALTER USERREQUIRE 子句,或者设置 require_secure_transport 系统变量来影响所有帐户。)

如果需要 FIPS 模式,建议使用包含该模式的操作系统平台;如果包含,则可以(并且应该)使用它。如果您的平台不包含 FIPS,则您有两个选择

  • 迁移到支持 FIPS OpenSSL 的平台。

  • 使用 fips_module 联机帮助页(请参阅 FIPS 概述)中的说明,从源代码构建 OpenSSL 库和 FIPS 对象模块。

注意

如果 OpenSSL FIPS 对象模块不可用,则 ssl_fips_mode--ssl-fips-mode 唯一允许的值为 OFF。尝试将 FIPS 模式设置为其他值时会发生错误。

如果需要 FIPS 模式,建议使用包含该模式的操作系统平台;如果包含,则可以(并且应该)使用它。如果您的平台不包含 FIPS,则您有两个选择

  • 迁移到支持 FIPS OpenSSL 的平台。

  • 使用 fips_module 联机帮助页(请参阅 FIPS 概述)中的说明,从源代码构建 OpenSSL 库和 FIPS 对象模块。