本节介绍两种连接方法。第一种方法使用 TLS(传输层安全)协议建立加密连接。第二种方法通过未加密的连接使用基于 RSA 密钥对的密码交换。
以下过程假定mysql 客户端在远程客户端主机上可用。这些过程还假设您已将客户端证书和密钥文件分发到远程客户端,如 分发客户端证书和密钥文件中所述。
先前创建的用户帐户用于连接到服务器。请参阅第 13 章,创建用户帐户。
如果服务器支持加密连接,则 MySQL 客户端程序会尝试建立加密连接。在此部署中,--ssl
为服务器启用了该选项,这意味着支持加密连接。
-
使用mysql客户端程序,为
user1@203.0.113.11
您之前创建的帐户建立连接。该user1@203.0.113.11
帐户是使用该REQUIRE X509
选项创建的,该选项要求用户出示有效证书。$> cd /usr/local/mysql $> bin/mysql --user=user1 -p --host=192.0.2.24 --ssl-mode=VERIFY_CA --ssl-ca=/path/to/ca.pem --ssl-cert=/path/to/client-cert.pem --ssl-key=/path/to/client-key.pem
该
--host
选项指定运行 MySQL 服务器的主机。-
该
--ssl-mode=VERIFY_CA
选项确保建立加密连接并根据配置的证书颁发机构 (CA) 证书验证 TLS 证书;它确保客户端和服务器信任一个共同的 CA,因此很可能与正确的一方进行通信。笔记理想情况下,
--ssl-mode
应设置为VERIFY_IDENTITY
。此选项类似VERIFY_CA
,但它另外要求服务器证书与尝试连接的主机相匹配,这意味着服务器证书必须由有效的证书颁发机构 (CA) 签名,并将您的服务器主机作为通用名称 (CN ). 此部署中使用的 MySQL 生成的证书不支持此模式。 、和 选项定义分发的客户端证书和密钥文件的路径,如分发客户端证书和密钥文件
--ssl-ca
中 所述。--ssl-cert
--ssl-key
-
Ssl_cipher
连接成功后,通过检查状态变量 的值来验证当前连接是否使用了加密 。如果该值为空,则连接未加密。否则,连接被加密并且该值指示加密密码。例如:mysql> SHOW STATUS LIKE 'Ssl_cipher'; +---------------+---------------------------+ | Variable_name | Value | +---------------+---------------------------+ | Ssl_cipher | DHE-RSA-AES128-GCM-SHA256 | +---------------+---------------------------+
-
要查看所有连接的 TLS 版本和密码,请以 MySQL root 用户身份 查询
Sys
模式 视图:session_ssl_status
$> cd /usr/local/mysql $> bin/mysql -u root -p Enter password: (enter the root password here)
mysql> SELECT * FROM sys.session_ssl_status; +-----------+-------------+---------------------------+---------------------+ | thread_id | ssl_version | ssl_cipher | ssl_sessions_reused | +-----------+-------------+---------------------------+---------------------+ | 51 | | | 0 | | 52 | TLSv1.2 | DHE-RSA-AES128-GCM-SHA256 | 0 | +-----------+-------------+---------------------------+---------------------+
有关加密连接的更多信息,请参阅 配置 MySQL 以使用加密连接。
对于使用 OpenSSL 编译的 MySQL 版本,使用插件进行身份验证的客户端sha256_password
可以使用基于 RSA 密钥对的密码交换通过未加密的连接连接到服务器。(客户端和服务器都必须使用 OpenSSL 进行编译。)
为了支持RSA加密,服务端在数据目录下生成RSA公私钥文件:
$> cd /usr/local/mysql/data
$> ls *_key.pem
private_key.pem public_key.pem
默认情况下,服务器还公开用于定义 RSA 私钥和公钥路径的变量:
-
sha256_password_private_key_path
定义 RSA 私钥文件的路径名。
-
sha256_password_public_key_path
定义 RSA 公钥文件的路径名。
如果 RSA 公钥和私钥文件位于 MySQL 数据目录中并命名为
private_key.pem
and
public_key.pem
,因为它们在此部署中,
默认情况下会配置sha256_password_private_key_path
and
sha256_password_public_key_path
选项。
当使用sha256_passsword
插件的客户端尝试未加密的连接时,
插件会向客户端发送 RSA 公钥,但如果将 RSA 公钥分发给客户端主机并且使用when 选项sha256_passsword
定义其位置,则可以避免密钥传输
--server-public-key-path
建立连接。避免密钥传输可以节省客户端/服务器协议中的往返行程。该选项在随后的说明中使用。有关分发密钥文件的信息,请参阅
分发客户端证书和密钥文件。
要建立使用基于 RSA 密钥对的密码交换的未加密连接,请使用mysql
客户端程序和user2@203.0.113.12
您之前创建的帐户。该
user2@203.0.113.12
帐户是在没有 SSL/TLS 选项的情况下创建的,以允许该帐户与服务器建立未加密的连接。
$> cd /usr/local/mysql
$> bin/mysql --user=user2 -p --ssl-mode=DISABLED --host=192.0.2.24
--server-public-key-path=/path/to/public_key.pem
该
--host
选项指定运行 MySQL 服务器的主机。该
--ssl-mode=DISABLE
选项确保连接未加密。该
--server-public-key-path
选项定义了客户端主机 (public_key.pem
) 上包含服务器使用的相同 RSA 公钥的文件的路径名。