MySQL 支持 FIPS 模式,如果使用 OpenSSL 1.0.2 编译,并且 OpenSSL 库和 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 版本。有关详细信息,请参阅 OpenSSL FIPS 用户指南。
MySQL 中 FIPS 模式的系统要求
为了让 MySQL 支持 FIPS 模式,必须满足以下系统要求:
在构建时,必须使用 OpenSSL 编译 MySQL。如果编译使用不同于 OpenSSL 的 SSL 库,则无法在 MySQL 中使用 FIPS 模式。
此外,MySQL 必须使用经认证可与 FIPS 一起使用的 OpenSSL 版本进行编译。OpenSSL 1.0.2 已通过认证,但 OpenSSL 1.1.1 未经过认证。MySQL 最新版本的二进制发行版是在某些平台上使用 OpenSSL 1.1.1 编译的,这意味着它们未通过 FIPS 认证。这会导致可用 MySQL 功能的权衡,具体取决于系统和 MySQL 配置:
使用具有 OpenSSL 1.0.2 和所需 FIPS 对象模块的系统。在这种情况下,如果您使用使用 OpenSSL 1.0.2 编译的二进制发行版,或者使用 OpenSSL 1.0.2 从源代码编译 MySQL,则可以为 MySQL 启用 FIPS 模式。但是,在这种情况下,您不能使用 TLSv1.3 协议或密码套件(需要 OpenSSL 1.1.1)。此外,您使用的 OpenSSL 版本在 2019 年底达到了生命周期终止状态。
使用具有 OpenSSL 1.1.1 或更高版本的系统。在这种情况下,您可以使用二进制包安装 MySQL,除了其他已经支持的 TLS 协议之外,您还可以使用 TLSv1.3 协议和密码套件。但是,您不能为 MySQL 启用 FIPS 模式。
在运行时,OpenSSL 库和 OpenSSL FIPS 对象模块必须可用作共享(动态链接)对象。可以构建静态链接的 OpenSSL 对象,但 MySQL 不能使用它们。
FIPS 模式已在 EL7 上针对 MySQL 进行了测试,但可能适用于其他系统。
如果您的平台或操作系统提供 OpenSSL FIPS 对象模块,您可以使用它。否则,您可以从源代码构建 OpenSSL 库和 FIPS 对象模块。使用 OpenSSL FIPS 用户指南中的说明(请参阅 FIPS 概述)。
在 MySQL 中配置 FIPS 模式
MySQL 在服务器端和客户端启用对 FIPS 模式的控制:
所述
ssl_fips_mode系统变量控制是否将服务器在FIPS模式操作。该
--ssl-fips-mode客户端选项控制是否给定的MySQL客户端在FIPS模式下运行。
该ssl_fips_mode系统变量和--ssl-fips-mode 客户端选项允许这些值:
OFF:禁用 FIPS 模式。ON:启用 FIPS 模式。STRICT:启用“严格” FIPS 模式。
在服务器端,数值 ssl_fips_mode0、1 和 2 分别相当于OFF、 ON、 和STRICT。
重要的
通常,STRICT比 施加更多限制ON,但 MySQL 本身除了向 OpenSSL 指定 FIPS 模式值之外没有特定于 FIPS 的代码。FIPS 模式的确切行为 ON或STRICT取决于 OpenSSL 版本。有关详细信息,请参阅 OpenSSL FIPS 用户指南(请参阅FIPS 概述)。
笔记
如果 OpenSSL FIPS 对象模块不可用,则ssl_fips_mode和 的唯一允许值 --ssl-fips-mode是 OFF。尝试将 FIPS 模式设置为不同的值时会发生错误。
服务器端的 FIPS 模式适用于服务器执行的加密操作。这包括在服务器内运行的复制(源/副本和组复制)和 X 插件。
FIPS 模式也适用于客户端尝试连接到服务器的情况。启用后,无论是在客户端还是服务器端,它都会限制可以选择哪些受支持的加密密码。但是,启用 FIPS 模式并不要求必须使用加密连接,或者必须加密用户凭据。例如,如果启用 FIPS 模式,则需要更强的加密算法。特别是 MD5 受到限制,因此尝试使用诸如此类的加密密码建立加密连接是RC4-MD5行不通的。但是 FIPS 模式并没有阻止建立未加密的连接。(为此,您可以使用REQUIRE子句 for CREATE USERor ALTER USER对于特定用户帐户,或设置 require_secure_transport系统变量以影响所有帐户。)




