

# 使用 SSL/TLS 加密客户端与 Amazon RDS 上 MySQL 数据库实例的连接
<a name="mysql-ssl-connections"></a>

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

借助 Amazon RDS，可以通过使用 SSL/TLS 加密客户端与 MySQL 数据库实例的连接，要求所有与 MySQL 数据库实例的连接都使用 SSL/TLS，以及使用 SSL/TLS（加密）从 MySQL 命令行客户端进行连接，从而保护传输中数据。以下各节提供了有关为 Amazon RDS 上的 MySQL 数据库实例配置和使用 SSL/TLS 加密的指导。

**Topics**
+ [

# Amazon RDS 上 MySQL 数据库实例的 SSL/TLS 支持
](MySQL.Concepts.SSLSupport.md)
+ [

# Amazon RDS 上 MySQL 数据库实例的特定用户账户需要 SSL/TLS
](mysql-ssl-connections.require-ssl-users.md)
+ [

# 所有与 Amazon RDS 上的 MySQL 数据库实例的连接都需要 SSL/TLS
](mysql-ssl-connections.require-ssl.md)
+ [

# 从 MySQL 命令行客户端使用 SSL/TLS 连接到 Amazon RDS 上的 MySQL 数据库实例（已加密）
](USER_ConnectToInstanceSSL.CLI.md)

# Amazon RDS 上 MySQL 数据库实例的 SSL/TLS 支持
<a name="MySQL.Concepts.SSLSupport"></a>

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

Amazon RDS 创建的 SSL/TLS 证书是受信任的根实体且在大多数情况下有效，但如果应用程序不接受证书链，则该证书可能会失败。如果应用程序不接受证书链，请尝试使用中间证书连接到 AWS 区域。例如，您必须使用中间证书通过 SSL/TLS 连接到 AWS GovCloud (US) 区域。

有关下载证书的信息，请参阅 [使用 SSL/TLS 加密与数据库实例或集群的连接](UsingWithRDS.SSL.md)。有关将 SSL/TLS 与 MySQL 一起使用的更多信息，请参阅[更新应用程序以使用新的 SSL/TLS 证书连接到 MySQL 数据库实例](ssl-certificate-rotation-mysql.md)。

对于 MySQL 8.0 及更低版本，Amazon RDS for MySQL 使用 OpenSSL 进行安全连接。对于 MySQL 8.4 及更高版本，Amazon RDS for MySQL 使用 AWS-LC。TLS 支持取决于 MySQL 版本。下表显示了支持 TLS 的 MySQL 版本。


| MySQL 版本 | TLS 1.0 | TLS 1.1 | TLS 1.2 | TLS 1.3 | 
| --- | --- | --- | --- | --- | 
|  MySQL 8.4  |  不支持  |  不支持  |  支持  |  支持  | 
|  MySQL 8.0  |  不支持  |  不支持  |  支持  |  支持  | 
|  MySQL 5.7  |  支持  |  支持  |  支持  |  不支持  | 

# Amazon RDS 上 MySQL 数据库实例的特定用户账户需要 SSL/TLS
<a name="mysql-ssl-connections.require-ssl-users"></a>

对于与 Amazon RDS 上的 MySQL 数据库实例的指定用户账户连接，可以要求进行 SSL/TLS 加密。保护敏感信息免遭未经授权的访问或拦截，对于在考虑数据机密性的情况下强制执行安全策略至关重要。

若要求特定用户的账户建立 SSL/TLS 连接，请使用以下语句之一（具体取决于 MySQL 版本），来要求用户账户 `encrypted_user` 建立 SSL/TLS 连接。

为此，请使用以下语句。

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

有关使用 MySQL 进行 SSL/TLS 连接的更多信息，请参阅 MySQL 文档中的[使用加密连接](https://dev.mysql.com/doc/refman/8.0/en/encrypted-connections.html)。

# 所有与 Amazon RDS 上的 MySQL 数据库实例的连接都需要 SSL/TLS
<a name="mysql-ssl-connections.require-ssl"></a>

使用 `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.
```

有关设置参数的信息，请参阅[在 Amazon RDS 中修改数据库参数组中的参数](USER_WorkingWithParamGroups.Modifying.md)。

有关 `require_secure_transport` 参数的更多信息，请参阅 [MySQL 文档](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_require_secure_transport)。

# 从 MySQL 命令行客户端使用 SSL/TLS 连接到 Amazon RDS 上的 MySQL 数据库实例（已加密）
<a name="USER_ConnectToInstanceSSL.CLI"></a>

根据您使用的 MySQL 或 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. 下载适用于所有 AWS 区域的根证书。

   有关下载证书的信息，请参阅 [使用 SSL/TLS 加密与数据库实例或集群的连接](UsingWithRDS.SSL.md)。

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

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

   ```
   mysql -h mysql–instance1.123456789012.us-east-1.rds.amazonaws.com --ssl-ca=global-bundle.pem --ssl-mode=REQUIRED -P 3306 -u myadmin -p
   ```

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

   ```
   mysql -h mysql–instance1.123456789012.us-east-1.rds.amazonaws.com --ssl-ca=global-bundle.pem --ssl-mode=VERIFY_IDENTITY -P 3306 -u myadmin -p
   ```

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

   ```
   mysql -h mysql–instance1.123456789012.us-east-1.rds.amazonaws.com --ssl-ca=global-bundle.pem --ssl -P 3306 -u myadmin -p
   ```

1. 根据系统提示输入主用户密码。

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

```
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>
```