MySQL安全部署指南/连接到服务器

第十四章连接服务器

介绍两种连接方式。第一种方法使用TLS(传输层安全)协议建立加密连接。第二种方法在未加密的连接上使用基于RSA密钥对的密码交换。

下面的过程假设mysql客户端可在远程客户端主机上使用。这些过程还假设您已经将客户端证书和密钥文件分发到如中所述的远程客户机分发客户端证书和密钥文件

前面创建的用户帐户用于连接到服务器。看到第十三章,创建用户帐号

使用加密连接

MySQL客户端程序尝试建立一个加密连接,如果服务器支持加密连接。在此部署中,——ssl选项为服务器启用,这意味着支持加密连接。

  1. 使用mysql客户端程序,建立连接user1@203.0.113.11您以前创建的帐户。的user1@203.0.113.11帐户是用需要X509选项,该选项要求用户提供有效的证书。

    shell> cd /usr/local/mysql shell> bin/mysql——user=user1 -p——host=192.0.2.24——ssl-mode=VERIFY_CA——ssl-ca= . sh/ /路径ca.pem——ssl-cert =/ /路径client-cert。pem - ssl密钥=/ /路径client-key.pem
    • ——主机option指定MySQL服务器运行的主机。

    • ——ssl-mode = VERIFY_CA选项确保建立加密连接,并根据配置的证书颁发机构(CA)证书验证TLS证书;它确保客户端和服务器信任一个公共CA,因此可能与正确的一方通信。

      请注意

      理想情况下,——ssl-mode应该设置为VERIFY_IDENTITY.这个选项就像VERIFY_CA但是它还要求服务器证书与连接尝试到的主机相匹配,这意味着服务器证书必须由有效的证书颁发机构(CA)签名,并使用您的服务器主机作为公共名称(CN)。本部署中使用的mysql生成的证书不支持此模式。

    • ——ssl-ca——ssl-cert,——ssl密钥选项定义分布式客户端证书和密钥文件的路径,如中所述分发客户端证书和密钥文件

  2. 的值来验证当前连接是否使用了加密Ssl_cipher状态变量。如果该值为空,则表示未加密连接。否则表示加密连接,取值为加密密码。例如:

    mysql> SHOW STATUS LIKE 'Ssl_cipher';+---------------+---------------------------+ | Variable_name |值  | +---------------+---------------------------+ | Ssl_cipher | DHE-RSA-AES128-GCM-SHA256  | +---------------+---------------------------+
  3. 如果需要查看所有连接的TLS版本和加密信息,请查询Sys模式session_ssl_status以MySQL root用户查看:

    shell> cd /usr/local/mysql shell> bin/mysql -u root -p Enter password:(此处输入root密码)
    SELECT * FROM sys.session_ssl_status;+-----------+-------------+---------------------------+---------------------+ | thread_id | ssl_version | ssl_cipher | ssl_sessions_reused  | +-----------+-------------+---------------------------+---------------------+ | 52 51 | | | 0 | | | TLSv1.2 | DHE-RSA-AES128-GCM-SHA256 | 0  | +-----------+-------------+---------------------------+---------------------+

有关加密连接的更多信息,请参见配置MySQL使用加密连接

在未加密的连接上使用基于RSA密钥对的密码交换

对于用OpenSSL编译的MySQL版本,使用sha256_password插件可以使用基于RSA密钥对的密码交换,通过不加密的连接连接到服务器。(客户端和服务器都必须使用OpenSSL编译。)

为了支持RSA加密,服务器在data目录下生成RSA公私钥文件:

Shell > CD /usr/local/mysql/data > ls *_key。pem private_key。pem public_key.pem

默认情况下,服务器还公开用于定义RSA私钥和公钥路径的变量:

如果RSA公钥和私钥文件位于“MySQL data”目录下,且命名为private_key.pem而且public_key.pem,就像他们在这个部署中一样sha256_password_private_key_path而且sha256_password_public_key_path默认情况下配置选项。

的客户端sha256_passsword插件尝试未加密的连接sha256_passsword插件将RSA公钥发送到客户端,但是如果将RSA公钥分发到客户端主机,并且使用——server-public-key-path选项。避免密钥传输节省了客户端/服务器协议中的一次往返。此选项将在下面的说明中使用。有关分发密钥文件的信息,请参见分发客户端证书和密钥文件

若要建立使用基于RSA密钥对的密码交换的非加密连接,请使用mysql客户端程序和user2@203.0.113.12您以前创建的帐户。的user2@203.0.113.12创建帐户时没有使用SSL/TLS选项,以允许帐户建立到服务器的不加密连接。

shell> cd /usr/local/mysql shell> bin/mysql——user=user2 -p——ssl-mode=DISABLED——host=192.0.2.24——server-public-key-path= . sh/ /路径public_key.pem