为 MySQL 客户端启用 TLS
mysqlmysqli database
TLS 也称为 SSL(安全套接字层)。它指的是传输层安全性。
当 MySQL 客户端和服务器之间存在未加密的连接时,有权访问网络的人可以监视所有流量并检查客户端和服务器之间发送或接收的数据。当用户希望以安全的方式通过网络传输信息时,未加密的连接是不可接受的。
要使任何类型的数据都无法读取,必须使用加密。加密算法通常包括有助于抵御多种已知攻击的安全元素,其中一些攻击包括更改加密消息的顺序或重放数据两次。MySQL 支持客户端和服务器之间发生的加密连接,它们都使用 TLS 协议。但是 MySQL 不使用 SSL 协议进行加密连接,因为加密很弱。
TLS 使用加密算法来确保通过公共网络接收的数据是可信数据。它有许多方法来检测数据更改、丢失或重放。TLS 还使用 X.509 标准提供的身份验证算法。
启用 TLS 的步骤
MySQL 根据每个连接执行加密。给定用户的加密可以是可选的,也可以是强制性的。这使得用户能够根据应用程序的要求选择加密或未加密的连接。
让我们了解如何为 MySQL 客户端启用 TLS:
- 启动服务器时,必须指定配置文件中的 ssl-cert 和 ssl-key 参数。
- 证书或密钥是在 OpenSSL 的帮助下签名和生成的。
- 也可以使用 MySQL 中的 mysql_ssl_rsa_setup 工具生成此密钥:
mysql_ssl_rsa_setup --datadir=./certs
- 如果参数正确,则将传递一个在启动时启用的安全连接作为输出。
- 重新加载证书、密钥和 CA - 在服务器实例上执行 ALTER INSTANCE RELOAD TLS 语句。这确保服务器实例不必重新加载。
- 成功执行建立的连接后,新加载的证书、密钥和 CA 生效。
- MySQL 客户端配置为使用加密连接 - 默认情况下尝试设置加密连接。如果服务器不支持加密连接,则自动返回未加密的连接。
- 可以使用 --ssl-mode 参数更改客户端的连接行为:
--ssl-mode=REQUIRED- 表示需要加密连接。
需要启用身份验证:如果未指定 ssl-ca 参数,则客户端或服务器默认不进行身份验证。
- 必须在服务器中指定 ssl-cert 和 ssl-key 参数。
- 在 MySQL 客户端中指定 --ssl-ca 参数。
- 在 MySQL 客户端中将 --ssl-mode 指定为 VERIFY_CA。
- 在服务器中配置的证书 (ssl-cert) 由客户端 --ssl-ca 参数指定的 CA 签名。
- 如果不是,身份验证失败。
要从服务器验证 MySQL 客户端:
- 在服务器中指定 ssl-cert、ssl-key 和 ssl-ca 参数。
- --ssl-cert 和 --ssl-key 参数客户端中指定的。
- 服务器配置的证书和客户端配置的证书由服务器指定的 ssl-ca 签名。
- 服务器到客户端的身份验证是可选的。如果客户端在 TLS 握手期间未显示其身份证明证书,则仍会建立 TLS 连接。
- 检查当前连接是否使用任何加密。