使用 SSL/TLS 加密客户端与 MySQL 数据库实例的连接 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 SSL/TLS 加密客户端与 MySQL 数据库实例的连接

安全套接字层 (SSL) 是用于保护客户端和服务器之间的网络连接的行业标准协议。在 SSL 版本 3.0 之后,此名称已更改为传输层安全性协议 (TLS)。Amazon RDS 对于 MySQL 数据库实例支持 SSL/TLS 加密。使用 SSL/TLS,您可加密应用程序客户端和 MySQL 数据库实例之间的连接。SSL/TLS 支持在 MySQL 的所有 Amazon Web Services 区域中都可用。

将 SSL/TLS 与 MySQL 数据库实例结合使用

在 Amazon RDS 预置数据库实例时,Amazon RDS 创建 SSL/TLS 证书,并将该证书安装在数据库实例上。这些证书由证书颁发机构签署。SSL/TLS 证书会将数据库实例终端节点作为 SSL/TLS 证书的公用名 (CN) 包含在内以防止欺诈攻击。

有关下载证书的信息,请参阅 使用 SSL/TLS 加密与数据库实例或集群的连接。有关将 SSL/TLS 与 MySQL 一起使用的更多信息,请参阅更新应用程序以使用新的 SSL/TLS 证书连接到 MySQL 数据库实例

MySQL 使用 OpenSSL 来实现安全连接。Amazon RDS for MySQL 支持传输层安全性协议(TLS)版本 1.0、1.1、1.2 和 1.3。TLS 支持取决于 MySQL 版本。下表显示了支持 TLS 的 MySQL 版本。

MySQL 版本 TLS 1.0 TLS 1.1 TLS 1.2 TLS 1.3

MySQL 8.0

不支持

不支持

支持

支持

MySQL 5.7

支持

支持

支持

不支持

您可以要求特定用户账户建立 SSL/TLS 连接。例如,可以根据您的 MySQL 版本,使用以下语句之一来要求用户账户 encrypted_user 建立 SSL/TLS 连接。

为此,请使用以下语句。

ALTER USER 'encrypted_user'@'%' REQUIRE SSL;

有关使用 MySQL 进行 SSL/TLS 连接的更多信息,请参阅 MySQL 文档中的使用加密连接

所有与 MySQL 数据库实例的连接都需要 SSL/TLS

使用 require_secure_transport 参数要求与 MySQL 数据库实例的所有用户连接都使用 SSL/TLS。默认情况下,require_secure_transport 参数设置为 OFF。您可将 require_secure_transport 参数设置为 ON 以要求使用 SSL/TLS 连接到数据库实例。

您可通过更新数据库实例的数据库参数组来设置 require_secure_transport 参数值。您无需重启数据库实例即可使更改生效。

当数据库实例的 require_secure_transport 参数设置为 ON 时,如果数据库客户端能够建立加密连接,则可以连接到该数据库实例。否则,将向客户端返回类似于以下内容的错误消息:

MySQL Error 3159 (HY000): Connections using insecure transport are prohibited while --require_secure_transport=ON.

有关设置参数的信息,请参阅 修改数据库参数组中的参数

有关 require_secure_transport 参数的更多信息,请参阅 MySQL 文档

从 MySQL 命令行客户端使用 SSL/TLS(加密)进行连接

如果您使用的是 MySQL 5.7 版本、MySQL 8.0 版本或 MariaDB 版本,则 mysql 客户端程序参数略有不同。

要查看使用的版本,请使用 --version 选项运行 mysql 命令。在以下示例中,结果显示客户端程序来自 MariaDB。

$ mysql --version mysql Ver 15.1 Distrib 10.5.15-MariaDB, for osx10.15 (x86_64) using readline 5.1

大多数 Linux 发行版(例如 Amazon Linux、CentOS、SUSE 和 Debian)都用 MariaDB 取代了 MySQL,mysql 版本来自 MariaDB。

要使用 SSL/TLS 连接到数据库实例,请执行以下步骤:

使用 MySQL 命令行客户端连接到使用 SSL/TLS 加密的数据库实例
  1. 下载适用于所有 Amazon Web Services 区域的根证书。

    有关下载证书的信息,请参阅 使用 SSL/TLS 加密与数据库实例或集群的连接

  2. 使用 MySQL 命令行客户端,通过 SSL/TLS 加密连接到数据库实例。对于 -h 参数,替换为数据库实例的 DNS 名称(端点)。对于 --ssl-ca 参数,替换为 SSL/TLS 证书文件名。对于 -P 参数,替换为数据库实例的端口。对于 -u 参数,替换为有效数据库用户(如主用户)的用户名。根据系统提示输入主用户密码。

    以下示例说明了如何在 MySQL 5.7 和更高版本中使用 --ssl-ca 参数启动客户端。

    mysql -h myinstance.123456789012.rds-cn-north-1.amazonaws.com --ssl-ca=global-bundle.pem --ssl-mode=REQUIRED -P 3306 -u myadmin -p

    如果要求 SSL/TLS 连接对照 SSL/TLS 证书中的端点验证数据库实例端点,请输入以下命令:

    mysql -h myinstance.123456789012.rds-cn-north-1.amazonaws.com --ssl-ca=global-bundle.pem --ssl-mode=VERIFY_IDENTITY -P 3306 -u myadmin -p

    以下示例说明了如何在 MariaDB 客户端和更高版本中使用 --ssl-ca 参数启动客户端。

    mysql -h myinstance.123456789012.rds-cn-north-1.amazonaws.com --ssl-ca=global-bundle.pem --ssl -P 3306 -u myadmin -p
  3. 根据系统提示输入主用户密码。

您会看到类似以下内容的输出。

Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 9738 Server version: 8.0.28 Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>