使用 SSL/TLS 加密客户端与 MariaDB 数据库实例的连接 - Amazon Relational Database Service

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

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

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

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

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

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

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

TLS 版本 MariaDB 10.11 MariaDB 10.6 MariaDB 10.5 MariaDB 10.4

TLS 1.3

所有次要版本

所有次要版本

所有次要版本

所有次要版本

TLS 1.2

所有次要版本

所有次要版本

所有次要版本

所有次要版本

TLS 1.1

10.11.6 及更低版本

10.6.16 及更低版本

10.5.23 及更低版本

10.4.32 及更低版本

TLS 1.0

10.11.6 及更低版本

10.6.16 及更低版本

10.5.23 及更低版本

10.4.32 及更低版本

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

使用以下语句。

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

有关与 MariaDB 的 SSL/TLS 连接的更多信息,请参阅 MariaDB 文档中的保护客户端和服务器的连接

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

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

注意

只有 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)

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

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

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

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

  2. 使用 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
  3. 根据系统提示输入主用户密码。

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

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)]>