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

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

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

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

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

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

Amazon RDS for MariaDB 对于所有 MariaDB 版本都支持传输层安全性协议(TLS)版本 1.0、1.1、1.2 和 1.3。

您可以要求特定用户账户建立 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. 下载适用于所有 Amazon Web Services 区域的根证书。

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

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

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

    mysql -h myinstance.123456789012.rds-cn-north-1.amazonaws.com --ssl-ca=global-bundle.pem --ssl -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-verify-server-cert -P 3306 -u myadmin -p

    以下示例说明了如何在 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
  3. 根据系统提示输入主用户密码。

应可以看到如下所示的输出内容。

Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 31 Server version: 10.5.15-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)]>