6.3 使用加密的连接

通过 MySQLClient 端和服务器之间的未加密连接,可以访问网络的人可以监视您的所有流量,并检查在 Client 端和服务器之间发送或接收的数据。

当您必须以安全方式在网络上移动信息时,未经加密的连接是不可接受的。要使任何类型的数据都不可读,请使用加密。加密算法必须包括安全元素,以抵抗多种已知的攻击,例如更改加密消息的 Sequences 或两次重播数据。

MySQL 支持使用 TLS(传输层安全性)协议在 Client 端和服务器之间进行加密连接。 TLS 有时被称为 SSL(安全套接字层),但是 MySQL 实际上并不使用 SSL 协议进行加密连接,因为它的加密很弱(请参阅第 6.3.2 节“加密的连接 TLS 协议和密码”)。

TLS 使用加密算法来确保可以信任通过公共网络接收的数据。它具有检测数据更改,丢失或重放的机制。 TLS 还合并了使用 X.509 标准提供身份验证的算法。

X.509 使识别 Internet 上的某人成为可能。从根本上说,应该有一个称为“证书颁发机构”(或 CA)的实体,它将实体电子证书分配给需要它们的任何人。证书依赖于具有两个加密密钥(公共密钥和 Secret 密钥)的非对称加密算法。证书所有者可以将证书出示给另一方作为身份证明。证书由其所有者的公钥组成。使用此公共密钥加密的任何数据都只能使用证书所有者拥有的相应密钥来解密。

可以使用 OpenSSL 或 yaSSL 编译 MySQL 以支持加密连接。有关两个软件包的比较,请参见第 6.3.4 节“依赖于 SSL 库的功能”。有关每个软件包支持的加密协议和密码的信息,请参见第 6.3.2 节“加密的连接 TLS 协议和密码”

Note

仅在 MySQL 5.7.28 之前,才可以使用 yaSSL 替代 OpenSSL 来编译 MySQL。从 MySQL 5.7.28 开始,对 yaSSL 的支持已删除,所有 MySQL 构建都使用 OpenSSL。

默认情况下,如果服务器支持加密连接,则 MySQL 程序会尝试使用加密进行连接,如果无法构建加密连接,则会退回到未加密连接。有关影响加密连接使用的选项的信息,请参阅第 6.3.1 节“配置 MySQL 以使用加密连接”加密连接的命令选项

MySQL 在每个连接的基础上执行加密,并且对给定用户使用加密可以是可选的或强制性的。这使您可以根据各个应用程序的需求选择加密或未加密的连接。有关如何要求用户使用加密连接的信息,请参见第 13.7.1.2 节“ CREATE USER 语句”中对CREATE USER语句的REQUIRE子句的讨论。另请参见位于第 5.1.7 节“服务器系统变量”require_secure_transport系统变量的描述。

主复制服务器和从复制服务器之间可以使用加密的连接。参见第 16.3.8 节“设置复制以使用加密的连接”

有关使用 MySQL C API 中的加密连接的信息,请参见第 27.7.14 节“加密连接的 C API 支持”

也可以使用 SSHConnecting 的加密连接到 MySQL 服务器主机。有关示例,请参见第 6.3.5 节“使用 SSH 从 Windows 远程连接到 MySQL”

MySQL 5.7 对加密连接的支持进行了一些改进。以下时间 table 概述了更改:

  • 5 .7.3:在 Client 端,明确的--ssl选项不再是建议性的,而是说明性的。给定启用了支持加密连接的服务器,Client 端程序可以通过仅指定--ssl选项来要求加密连接。 (以前,Client 端必须指定--ssl-ca选项或--ssl-ca--ssl-key--ssl-cert选项中的全部三个。)如果无法构建加密连接,则连接尝试将失败。缺少--ssl时,建议使用 Client 端上的其他--ssl-xxx选项:Client 端尝试使用加密进行连接,但是如果无法构建加密连接,则会退回到未加密的连接。

  • 5 .7.5:默认情况下启用服务器端--ssl选项值。

对于使用 OpenSSL 编译的服务器,可以使用auto_generate_certssha256_password_auto_generate_rsa_keys系统变量在启动时启用 SSL/RSA 证书和密钥文件的自动生成和自动发现。对于证书和密钥自动发现,如果启用了--ssl且未提供其他--ssl-xxx选项以显式配置加密连接,则服务器在发现数据目录中必需的证书和密钥文件时会尝试在启动时自动启用对加密连接的支持。

  • 5 .7.6:mysql_ssl_rsa_setupUtil 可用来简化手动生成 SSL/RSA 证书和密钥文件的过程。启动时 SSL/RSA 文件的自动发现功能已扩展到适用于所有服务器,无论是使用 OpenSSL 还是 yaSSL 进行编译。 (这意味着无需启用auto_generate_certs即可进行自动发现。)

如果服务器在启动时发现 CA 证书是自签名的,则它将警告写入错误日志。 (如果证书是由服务器自动创建的,或者使用mysql_ssl_rsa_setup手动创建的,则证书是自签名的。)

  • 5 .7.7:如果服务器支持加密连接,则默认情况下 CClient 端库尝试构建加密连接。这会影响 Client 端程序,如下所示:

  • 在没有--ssl选项的情况下,Client 端尝试使用加密进行连接,如果无法构建加密连接,则会退回到未加密的连接。

此更改还会影响基于 CClient 端库的 MySQL 连接器的后续发行版:Connector/C 和 Connector/ODBC。