10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 本手册下载
PDF (Ltr)- 41.5 mb
PDF (A4)- 41.6 mb
手册页(TGZ)- 262.2 kb
手册页(邮政编码)- 372.3 kb
信息(Gzip)- 4.0 mb
信息(邮政编码)- 4.0 mb
本手册节选

MySQL 8.0参考手册/.../ 配置MySQL使用加密连接

6.3.1配置MySQL使用加密连接

有几个配置参数可用于指示是否使用加密连接,以及指定适当的证书和密钥文件。本节提供了配置加密连接的服务器和客户端的一般指导:

加密连接也可以在其他上下文中使用,详见以下附加部分:

有关创建所需证书和密钥文件的说明可在第6.3.3节“创建SSL和RSA证书和密钥”

加密连接的服务器端启动配置

在服务器端——ssl选项指定服务器允许但不要求加密连接。默认情况下该选项是启用的,因此不需要显式指定它。

若要要求客户端使用加密连接进行连接,请启用require_secure_transport系统变量。看到配置加密连接为必选项

服务器端的这些系统变量指定了当允许客户端建立加密连接时服务器使用的证书和密钥文件:

  • ssl_ca: CA证书文件的路径名称。(ssl_capath类似,但指定CA证书文件目录的路径名称。)

  • ssl_cert:服务器公钥证书文件的路径名称。可以将该证书发送到客户机,并根据它所拥有的CA证书进行身份验证。

  • ssl_key:服务器私钥文件的路径名称。

例如,要启用加密连接的服务器,请使用my.cnf文件,根据需要更改文件名:

(mysqld) ssl_ca = ca。pem ssl_cert = server-cert。pem ssl_key =服务器密钥。pem

若要指定要求客户端使用加密连接,请启用require_secure_transport系统变量:

(mysqld) ssl_ca = ca。pem ssl_cert = server-cert。pem ssl_key =服务器密钥。pem require_secure_transport =对

每个证书和密钥系统变量以PEM格式命名一个文件。您是否需要创建所需的证书和密钥文件,请参见第6.3.3节“创建SSL和RSA证书和密钥”.使用OpenSSL编译的MySQL服务器可以在启动时自动生成丢失的证书和密钥文件。看到第6.3.3.1节“使用MySQL创建SSL和RSA证书和密钥”.或者,如果您有一个MySQL源发行版,您可以使用演示证书和其中的密钥文件来测试您的设置mysql-test / std_data目录中。

服务器自动发现证书和密钥文件。如果没有给出除。以外的显式加密连接选项——ssl(可能还有ssl_cipher)来配置加密连接,服务器会尝试在启动时自动启用加密连接支持:

  • 如果服务器发现有效的证书和密钥文件命名为ca.pemserver-cert.pem,server-key.pem在data目录中,它支持客户端加密连接。(文件不必是自动生成的;重要的是它们有这些名称并且是有效的。)

  • 如果服务器在数据目录中没有找到有效的证书和密钥文件,它将继续执行,但不支持加密连接。

如果服务器自动启用加密连接支持,它将向错误日志写入一个注释。如果服务器发现CA证书是自签名的,它将向错误日志写入警告。证书是自签名的,如果是由服务器自动创建或手动使用mysql_ssl_rsa_setup.)

MySQL还为服务器端加密连接控制提供了以下系统变量:

如果服务器不能从系统变量为服务器端加密连接控制创建有效的TLS上下文,则服务器将在不支持加密连接的情况下执行。

加密连接的服务器端运行时配置和监视

在MySQL 8.0.16之前,tls_xxx而且ssl_xxx配置加密连接支持的系统变量只能在服务器启动时设置。因此,这些系统变量决定了服务器用于所有新连接的TLS上下文。

从MySQL 8.0.16开始,tls_xxx而且ssl_xxx系统变量是动态的,可以在运行时设置,而不仅仅是在启动时。如果改变了集全球,新值只适用于服务器重新启动之前。如果改变了设置保存,新值也会延续到后续的服务器重启中。看到第13.7.6.1节“变量赋值的SET语法”.然而,对这些变量的运行时更改不会立即影响新连接的TLS上下文,这将在本节后面解释。

除了MySQL 8.0.16中支持对TLS上下文相关的系统变量进行运行时更改之外,服务器还支持对用于新连接的实际TLS上下文进行运行时更新。这个功能可能是有用的,例如,避免重新启动一个MySQL服务器,它已经运行了很长时间,以致于它的SSL证书已经过期。

为了创建初始TLS上下文,服务器使用与上下文相关的系统变量在启动时具有的值。为了公开上下文值,服务器还初始化一组相应的状态变量。下表显示了定义TLS上下文的系统变量,以及公开当前活动上下文值的相应状态变量。


从MySQL 8.0.21开始,这些活动的TLS上下文值也作为性能模式中的属性公开tls_channel_status表,以及任何其他活动TLS上下文的属性。

要在运行时重新配置TLS上下文,请使用以下过程:

  1. 将每个与TLS上下文相关的系统变量设置为其新值。

  2. 执行更改实例重新加载TLS.该语句根据与TLS上下文相关的系统变量的当前值重新配置活动的TLS上下文。它还设置与上下文相关的状态变量,以反映新的活动上下文值。该声明要求CONNECTION_ADMIN特权。

  3. 的执行后建立的新连接更改实例重新加载TLS使用新的TLS上下文。现有连接不受影响。如果要终止现有连接,请使用杀了声明。

由于重新配置过程的工作方式不同,每一对系统变量和状态变量的成员可能临时有不同的值:

  • 更改之前的系统变量更改实例重新加载TLS不要更改TLS上下文。此时,这些更改对新连接没有影响,相应的与上下文相关的系统和状态变量可能具有不同的值。这使您能够对各个系统变量进行所需的任何更改,然后使用原子地更新活动TLS上下文更改实例重新加载TLS在所有系统变量更改完成后。

  • 更改实例重新加载TLS,对应的系统变量和状态变量值相同。在下一次更改系统变量之前,这一直是正确的。

在某些情况下,更改实例重新加载TLS它本身就足以重新配置TLS上下文,而不需要更改任何系统变量。假设文件中的证书名为ssl_cert已经过期。用一个未过期的证书替换现有文件内容并执行就足够了更改实例重新加载TLS使新的文件内容被读取并用于新的连接。

从MySQL 8.0.21开始,服务器为管理连接接口实现独立的连接加密配置。看到对加密连接的管理接口支持.此外,更改实例重新加载TLS扩展为为通道子句,用于指定要为其重新加载TLS上下文的通道(接口)。看到第13.1.5节,“ALTER INSTANCE语句”.没有用于公开管理接口TLS上下文的状态变量,只有Performance Schematls_channel_status表公开主接口和管理接口的TLS属性。看到第27.12.21.7节“tls_channel_status表”

更新主接口TLS上下文有以下影响:

  • 更新更改了主连接接口上用于新连接的TLS上下文。

  • 更新还会更改管理接口上用于新连接的TLS上下文,除非为该接口配置了一些非默认的TLS参数值。

  • 更新不会影响其他已启用的服务器插件或组件(如组复制或X插件)使用的TLS上下文:

默认情况下,重载TLS动作回滚并出现错误,如果配置值不允许创建新的TLS上下文,则该动作将不起作用。新的连接将继续使用以前的上下文值。如果可选错误时没有回滚子句时,如果不能创建新上下文,则不会发生回滚。相反,会生成一个警告,并且对应用该语句的接口上的新连接禁用加密。

在连接接口上启用或禁用加密连接的选项仅在启动时生效。例如,——ssl而且——admin-ssl选项只在启动时影响主接口和管理接口是否支持加密连接。的操作将忽略这些选项,对的操作没有影响更改实例重新加载TLS在运行时。例如,你可以用——ssl =了在主界面禁用加密连接的情况下启动服务器,然后重新配置TLS并执行更改实例重新加载TLS在运行时启用加密连接。

加密连接的客户端配置

有关与建立加密连接相关的客户端选项的完整列表,请参见加密连接的命令选项

默认情况下,如果服务器支持加密连接,MySQL客户端程序会尝试建立加密连接,并通过——ssl-mode选择:

,则建立未加密连接的尝试失败require_secure_transport在服务器端启用系统变量,导致服务器需要加密连接。看到配置加密连接为必选项

客户端上的下列选项标识客户端在建立到服务器的加密连接时使用的证书和密钥文件。它们类似于ssl_cassl_cert,ssl_key服务器端使用的系统变量,但是——ssl-cert而且——ssl密钥识别客户端公钥和私钥:

  • ——ssl-ca: CA证书文件的路径名称。如果使用此选项,则必须指定服务器使用的相同证书。(——ssl-capath类似,但指定CA证书文件目录的路径名称。)

  • ——ssl-cert:客户端公钥证书文件的路径名称。

  • ——ssl密钥:客户端私钥文件的路径名称。

对于相对于默认加密提供的额外安全性,客户端可以提供与服务器使用的证书匹配的CA证书,并启用主机名身份验证。通过这种方式,服务器和客户端将它们的信任放在同一个CA证书中,客户端验证它连接到的主机是否为预期的主机:

请注意

主机名身份验证VERIFY_IDENTITY不能使用由服务器自动创建或手动创建的自签名证书mysql_ssl_rsa_setup(见第6.3.3.1节“使用MySQL创建SSL和RSA证书和密钥”).这种自签名证书不包含作为Common name值的服务器名。

在MySQL 8.0.12之前,主机名身份验证也不能用于使用通配符指定Common name的证书,因为该名称是与服务器名称一字不差地比较的。

MySQL还为客户端加密连接控制提供了以下选项:

根据客户端使用的MySQL帐户的加密要求,客户端可能需要指定某些选项来使用加密连接到MySQL服务器。

假设您希望使用一个没有特殊加密要求的帐户进行连接,或者使用创建用户声明中包含需要SSL条款。假设服务器支持加密连接,客户机可以使用加密连接——ssl-mode选项或带有显式的——ssl-mode =球迷们选择:

mysql

或者:

mysql——ssl-mode =优先

创建的帐户需要SSL子句,如果无法建立加密连接,则连接尝试失败。对于没有特殊加密要求的帐户,如果无法建立加密连接,则尝试退回到未加密连接。为了防止回退并在无法获得加密连接时失败,请像这样连接:

mysql——ssl-mode =

如果帐户有更严格的安全要求,则必须指定其他选项以建立加密连接:

  • 创建的帐户需要X509子句,客户端必须至少指定——ssl-cert而且——ssl密钥.此外,——ssl-ca(或——ssl-capath),以便验证服务器提供的公共证书。例如(在单行中输入命令):

    mysql——ssl-ca = ca。pem - ssl-cert = client-cert。pem - ssl密钥= client-key.pem
  • 创建的帐户要求发行人要求主题子句时,加密要求与for相同需要X509,但证书必须分别与帐户定义中指定的问题或主题相匹配。

有关的更多信息需要条款,请参阅第13.7.1.3节,“CREATE USER语句”

防止使用加密和覆盖其他——sslxxx选项,调用客户机程序——ssl-mode =禁用

mysql——ssl-mode =禁用

文件的会话值,以确定当前与服务器的连接是否使用加密Ssl_cipher状态变量。如果该值为空,则表示未加密连接。否则表示加密连接,取值为加密密码。例如:

显示会话状态为Ssl_cipher;+---------------+---------------------------+ | Variable_name |值  | +---------------+---------------------------+ | Ssl_cipher | DHE-RSA-AES128-GCM-SHA256  | +---------------+---------------------------+

mysql客户端,另一种选择是使用状态\ s命令并检查SSL线:

mysql > \ s…SSL:未使用…

或者:

mysql > \ s…SSL: Cipher in use is DHE-RSA-AES128-GCM-SHA256…

配置加密连接为必选项

对于某些MySQL部署来说,使用加密连接可能不仅是必要的,而且是必须的(例如,为了满足法规要求)。本节讨论使您能够做到这一点的配置设置。以下是控制级别:

  • 您可以将服务器配置为要求客户端使用加密连接进行连接。

  • 您可以调用各个客户机程序来要求加密连接,即使服务器允许但不要求加密。

  • 您可以将单个MySQL帐户配置为只能在加密连接上使用。

若要要求客户端使用加密连接进行连接,请启用require_secure_transport系统变量。例如,将这些行放在服务器中my.cnf文件:

(mysqld) require_secure_transport =

或者,要在运行时设置并保存该值,使用以下语句:

设置保存require_secure_transport =;

设置保存为正在运行的MySQL实例设置一个值。它还保存该值,使其可用于后续的服务器重启。看到第13.7.6.1节“变量赋值的SET语法”

require_secure_transport如果启用了,则客户机到服务器的连接需要使用某种形式的安全传输,并且服务器只允许使用SSL的TCP/IP连接,或者使用套接字文件(在Unix上)或共享内存(在Windows上)的连接。服务器拒绝不安全的连接尝试ER_SECURE_TRANSPORT_REQUIRED错误。

若要调用客户端程序,使其需要加密连接,无论服务器是否需要加密,请使用——ssl-mode期权的价值要求VERIFY_CA,或VERIFY_IDENTITY.例如:

mysql——ssl-mode=REQUIRED mysqldump——ssl-mode=VERIFY_CA mysqladmin——ssl-mode=VERIFY_IDENTITY

要将MySQL帐户配置为只能在加密连接上使用,需要包含需要条款的创建用户语句,创建帐户,并在该子句中指定所需的加密特征。例如,要要求加密连接并使用有效的X.509证书,请使用需要X509

CREATE USER 'jeffrey'@'localhost'

有关的更多信息需要条款,请参阅第13.7.1.3节,“CREATE USER语句”

若要修改没有加密要求的现有帐户,请使用改变用户声明。