

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

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

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

**Topics**
+ [

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

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

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

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

# Amazon RDS 上 MariaDB 数据库实例的 SSL/TLS 支持
<a name="MariaDB.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 证书连接到 MariaDB 实例](ssl-certificate-rotation-mariadb.md)。

Amazon RDS for MariaDB 支持传输层安全性协议（TLS）版本 1.3、1.2、1.1 和 1.0。TLS 支持取决于 MariaDB 次要版本。下表显示各个 MariaDB 次要版本的 TLS 支持情况。


| TLS 版本 | MariaDB 11.8 | MariaDB 11.4 | MariaDB 10.11 | MariaDB 10.6 | MariaDB 10.5 | MariaDB 10.4 | 
| --- | --- | --- | --- | --- | --- | --- | 
|  TLS 1.3  |  所有次要版本  |  所有次要版本  |  所有次要版本  |  所有次要版本  |  所有次要版本  |  所有次要版本  | 
|  TLS 1.2  |  所有次要版本  |  所有次要版本  |  所有次要版本  |  所有次要版本  |  所有次要版本  |  所有次要版本  | 
|  TLS 1.1  |  不支持  |  不支持  |  不支持  |  10.6.16 及更低版本  |  10.5.23 及更低版本  |  10.4.32 及更低版本  | 
|  TLS 1.0  |  不支持  |  不支持  | 不支持 | 10.6.16 及更低版本 |  10.5.23 及更低版本  |  10.4.32 及更低版本  | 

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

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

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

为此，请使用以下语句。

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

有关与 MariaDB 的 SSL/TLS 连接的更多信息，请参阅 MariaDB 文档中的[保护客户端和服务器的连接](https://mariadb.com/kb/en/securing-connections-for-client-and-server/)。

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

使用 `require_secure_transport` 参数要求与 MariaDB 数据库实例的所有用户连接都使用 SSL/TLS。对于 11.4 及更早版本，`require_secure_transport` 参数默认设置为 `OFF`。对于 11.8 及更高版本，默认值设置为 `ON`，强制对连接到您的数据库实例的连接使用 SSL/TLS。如果需要非安全连接，则可以将 `require_secure_transport` 参数更改为 `OFF`。

**注意**  
只有 MariaDB 版本 10.5 及更高版本才支持 `require_secure_transport` 参数。

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

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

```
ERROR 1045 (28000): Access denied for user 'USER'@'localhost' (using password: YES | NO)
```

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

有关 `require_secure_transport` 参数的更多信息，请参阅 [MariaDB 文档](https://mariadb.com/docs/ent/ref/mdb/system-variables/require_secure_transport/)。

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

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

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

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

   以下示例说明了如何在 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
   ```

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

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

   以下示例说明了如何在 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
   ```

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

您应该可以看到类似于如下所示的输出内容。

```
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 31
Server version: 10.6.10-MariaDB-log Source distribution
 
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
  
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>
```