Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  Security  /  FIPS Support

8.8 FIPS 支持

如果使用 OpenSSL 3.0 或 OpenSSL 1.0.2 编译 MySQL,并且在运行时提供 OpenSSL 库和 FIPS 对象模块,MySQL 就支持 FIPS 模式。

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

以下部分描述了 FIPS 模式和如何在 MySQL 中使用它:

Federal Information Processing Standards 140-2(FIPS 140-2)描述了一种安全标准,联邦机构(美国政府)可以要求用于保护敏感或贵重信息的加密模块。要被认为是联邦使用可接受,一个加密模块必须获得 FIPS 140-2 证书。如果一系统用于保护敏感数据缺少合适的 FIPS 140-2 证书,联邦机构不能购买它。

产品如 OpenSSL 可以在 FIPS 模式下使用,但是 OpenSSL 库本身并没有被验证为 FIPS。相反,OpenSSL 库与 OpenSSL FIPS 对象模块一起使用,以便 OpenSSL 基于应用程序在 FIPS 模式下运行。

关于FIPS和OpenSSL的实现,以下参考可能有帮助:

Important

FIPS模式对加密操作施加条件,如限制可接受的加密算法或要求更长的密钥长度。OpenSSL的确切FIPS行为取决于OpenSSL版本。

为了使MySQL支持FIPS模式,必须满足以下系统要求:

  • 在编译时,MySQL必须使用OpenSSL。FIPS模式不能在使用非OpenSSL SSL库的MySQL中使用。

    此外,MySQL还必须编译使用已获得FIPS认证的OpenSSL版本。OpenSSL 1.0.2和OpenSSL 3.0已经获得认证,但OpenSSL 1.1.1没有。最新版本的MySQL二进制分布在某些平台上编译使用OpenSSL 1.1.1,这意味着它们不具备FIPS认证。这将导致系统和MySQL配置中的权衡,取决于系统和MySQL配置:

    • 使用具有OpenSSL 1.0.2和所需FIPS对象模块的系统。在这种情况下,您可以使用OpenSSL 1.0.2编译的二进制分布或从源代码编译MySQL,但是您不能使用TLSv1.3协议或加密套件(需要OpenSSL 1.1.1)。此外,您正在使用一个已经在2019年底达到末期生命周期的 OpenSSL 版本。

    • 使用具有OpenSSL 1.1.1或更高版本的系统。在这种情况下,您可以安装MySQL使用二进制包,并且可以使用TLSv1.3协议和加密套件,除此之外,还可以使用其他已经支持的TLS协议。然而,您不能启用MySQL的FIPS模式。

    • 使用具有OpenSSL 3.0和所需FIPS对象模块的系统。在这种情况下,您可以使用OpenSSL 3.0编译的二进制分布或从源代码编译MySQL。可以直接通过OpenSSL 3.0配置文件来处理FIPS模式,而不是使用服务器端系统变量和客户端选项,虽然这些已经弃用,并且在未来版本中将被删除。在使用OpenSSL 3.0编译的MySQL时,如果 OpenSSL 库和FIPS对象模块可用,那么服务器读取OpenSSL配置文件并尊重设置的FIPS提供商,如果有一个。

      OpenSSL 3.0 Migration Guide中有关于升级到OpenSSL 3.0的总体信息。

  • 在运行时,OpenSSL库和OpenSSL FIPS对象模块必须作为共享对象可用。可以编译静态链接 OpenSSL 对象,但是MySQL不能使用它们。

FIPS模式已经在EL7上测试过,但可能也可以在其他系统上工作。

如果您的平台或操作系统提供了OpenSSL FIPS对象模块,您可以使用它。否则,可以从源代码中构建OpenSSL库和FIPS对象模块,按照fips_module手册页(见FIPS概述)中的说明进行。

Note

本节中描述的服务器端和客户端选项已经弃用。

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_mode值0、1和2等同于OFFONSTRICT,分别。

Important

一般来说,STRICTON 更加严格,但是 MySQL 自身没有 FIPS-特定的代码,只是将 FIPS 模式值指定给 OpenSSL。FIPS 模式对 ONSTRICT 的确切行为取决于 OpenSSL 版本。详细信息,请参阅 FIPS 概述

Note

如果 OpenSSL FIPS 对象模块不可用,那么唯一允许的值为 ssl_fips_mode--ssl-fips-mode 的值是 OFF。尝试将 FIPS 模式设置为不同值时会出现错误。

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

FIPS 模式也适用于客户端尝试连接到服务器。启用 FIPS 模式时,在客户端或服务器端,它限制了支持的加密算法可以选择的范围。然而,启用 FIPS 模式并不要求必须使用加密连接,也不要求用户凭证必须加密。例如,如果启用 FIPS 模式,强大的加密算法是必需的。在特定情况下,MD5 是受限制的,所以尝试使用如 RC4-MD5 的加密算法建立加密连接不起作用。但是,没有什么关于 FIPS 模式可以防止建立未加密连接。(要做到这点,可以使用CREATE USERALTER USER 对特定用户账户,或者将require_secure_transport 系统变量设置为影响所有账户。)