使用 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 一起使用的更多信息,请参阅为 MySQL 数据库实例使用新的 SSL/TLS 证书。
MySQL 使用 OpenSSL 来实现安全连接。Amazon RDS for MySQL 支持传输层安全性 (TLS) 版本 1.0、1.1 和 1.2。下表显示了支持 TLS 的 MySQL 版本。
MySQL 版本 | TLS 1.0 | TLS 1.1 | TLS 1.2 |
---|---|---|---|
MySQL 8.0 |
MySQL 8.0.27 和更高版本支持 |
MySQL 8.0.27 和更高版本支持 |
支持 |
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 加密的数据库实例
-
下载适用于所有 Amazon Web Services 区域的根证书。
有关下载证书的信息,请参阅 使用 SSL/TLS 加密与数据库实例的连接。
-
使用 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 -umyadmin
-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 -umyadmin
-p以下示例说明了如何在 MariaDB 客户端和更高版本中使用
--ssl-ca
参数启动客户端。mysql -h
myinstance.123456789012.rds-cn-north-1.amazonaws.com
--ssl-ca=global-bundle.pem
--ssl -P 3306 -umyadmin
-p -
根据系统提示输入主用户密码。
您会看到类似以下内容的输出。
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9738
Server version: 8.0.23 Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>