MySQL 8.0 参考手册  / 第 6 章 安全  /  6.8 FIPS 支持

6.8 FIPS 支持

如果使用 OpenSSL 1.0.2 编译,MySQL 支持 FIPS 模式,并且 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 模式,必须满足以下系统要求:

  • 在构建时,MySQL 必须使用 OpenSSL 进行编译。如果编译使用不同于 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,并且可以使用 TLSv1.3 协议和密码套件,以及其他已经支持的 TLS 协议。但是,您不能为 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 模式运行。

  • client 选项控制给定的--ssl-fips-modeMySQL 客户端是否以 FIPS 模式运行。

系统ssl_fips_mode变量和--ssl-fips-mode 客户端选项允许这些值:

  • OFF: 禁用 FIPS 模式。

  • ON:启用 FIPS 模式。

  • STRICT:启用严格 FIPS 模式。

在服务器端,数值 ssl_fips_mode0、1、2分别相当于OFFONSTRICT

重要的

通常,STRICT比 强加更多的限制ON,但 MySQL 本身除了向 OpenSSL 指定 FIPS 模式值外没有特定于 FIPS 的代码。FIPS 模式的确切行为 ONSTRICT取决于 OpenSSL 版本。有关详细信息,请参阅 OpenSSL FIPS 用户指南(请参阅FIPS 概述)。

笔记

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

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

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