MySQL安全部署指南/配置MySQL使用安全连接

第12章配置MySQL使用安全连接

介绍如何配置服务器端安全连接,以及如何分发客户端证书和密钥文件。

配置安全连接服务器

  1. MySQL需要证书和密钥文件来启用安全连接。默认情况下,使用OpenSSL编译的MySQL服务器在启动时在data目录中生成这些文件(如果它们不存在)。(MySQL企业版使用OpenSSL编译。)唯一的要求是——ssl选项是启用的,默认情况下是启用的,没有其他选项——ssl指定选项。

    1. 检查MySQL安装的数据目录,确认服务器端和客户端证书和密钥文件已经生成。

      CD /usr/local/mysql/data Shell > ls *.使用实例pem ca-key。pem client-cert。pem private_key。pem server-cert。ca.pem client-key。pem public_key。pem server-key.pem
      重要的

      通过MySQL生成证书文件有助于降低使用TLS的障碍。但是,这些证书是自签名的,这不是很安全。在您获得使用MySQL生成的文件的经验之后,请考虑从已注册的证书颁发机构获得CA证书。

    2. 这些选项标识服务器在建立安全连接时使用的证书和密钥文件:

      • ssl-ca = ca.pem

        标识CA (Certificate Authority)证书。

      • ssl-cert = server-cert.pem

        标识服务器公钥证书。

      • ssl密钥= server-key.pem

        标识服务器私钥。

      要显式配置这些选项,请将它们添加到(mysqld)选项组在MySQL配置文件(/etc/my.cnf):

      ssl_ca = ca。pem ssl_cert = server-cert。pem ssl_key = server-key.pem
  2. 默认情况下,MySQL服务器接受来自所有服务器主机IPv6和IPv4接口上MySQL用户帐户的TCP/IP连接。属性可以使此配置更具限制性bind_address配置选项到指定的IPv4或IPv6地址,以便服务器只接受该地址上的TCP/IP连接。

    例如,要让MySQL服务器只接受特定IPv4地址上的连接,可以在(mysqld)选项组在MySQL配置文件(/etc/my.cnf):

    bind_address = 192.0.2.24

    在这种情况下,客户端可以使用——主机= 192.0.2.24.不允许在其他服务器主机地址上连接。

    欲了解更多有关bind_address配置,请参阅服务器命令选项

  3. tls_version选项定义服务器对加密连接允许的协议。为了确保客户端使用TLSv1.3协议连接服务器,该协议比以前的TLS版本提供了更高的安全性tls_versionTLSv1.3。当使用OpenSSL 1.1.1或更高版本编译时,MySQL支持TLSv1、TLSv1.1、TLSv1.2和TLSv1.3协议。

    tls_version = TLSv1.3

    通过此设置,只有支持TLSv1.3的客户端才能建立到服务器的加密连接。对于使用OpenSSL 1.1.1或更高版本编译的MySQL服务器和客户端,从MySQL 8.0.16开始就支持TLSv1.3协议。

  4. 要进一步加强部署,可以使用tls_ciphersuites变量限制服务器允许使用TLSv1.3的加密连接使用的密码套件。方法下添加类似于此的条目,以允许使用单个密码套件(mysqld)选项组在MySQL配置文件(/etc/my.cnf):

    tls_ciphersuites = TLS_AES_128_GCM_SHA256

    若要指定多个密码套件,请使用冒号分隔密码套件名称。

    属性的值,可以通过建立到服务器的加密连接并发出以下语句来确定给定服务器支持哪些密码套件Ssl_cipher_list状态变量:

    mysql> SHOW SESSION STATUS LIKE 'Ssl_cipher_list'\G

    对于使用TLSv1.3的加密连接,OpenSSL 1.1.1及更高版本支持以下密码套件,其中前三个默认启用:

    tls_aes_128_ccm_8_sha256 tls_aes_128_ccm_8_sha256
    请注意

    MySQL 8.0.16为使用TLSv1.3的加密连接添加了加密套件支持。如果您使用TLSv1.2或更低的版本,请使用——ssl cipher选项来配置特定的密码,而不是使用tls_ciphersuites

    选项也可以使用——tls-ciphersuites选项,以限制客户端程序允许使用TLSv1.3的加密连接的密码套件。

    有关密码和密码套件的详细信息,请参见加密连接TLS协议和密码

  5. 可选地,要要求所有客户机安全地连接到服务器,可以启用require_secure_transport选择。启用此选项时,服务器只允许使用TLS或使用套接字文件(在Unix上)或共享内存(在Windows上)的TCP/IP连接。禁止使用不安全传输的连接,包括使用基于RSA密钥对的密码交换的未加密连接。

    require_secure_transport选项在此部署中没有使用,因此可以通过未加密的连接演示基于RSA密钥对的密码交换。(见在未加密连接上使用基于RSA密钥对的密码交换)。

    请注意

    启用require_secure_transport阻止不使用TLS的TCP/IP连接。由于相关的网络和CPU成本,要求所有TCP/IP连接使用TLS可能会影响性能。

  6. 重新启动服务器以应用配置更改:

    Shell > systemctl restart mysqld

分发客户端证书和密钥文件

客户端证书和密钥文件默认生成在“MySQL data”目录下。数据目录的权限仅允许访问mysql运行MySQL服务器的帐户,因此客户端程序不能使用位于那里的文件。要使文件对客户端可用,要么将文件分发到客户端主机,要么将它们放置在客户端可访问的挂载分区上。文件应该位于客户端可读(但不可写)的目录中。在分发文件时使用安全通道,以确保文件在传输过程中不被篡改。

需要分发的客户端证书和密钥文件包括:

  • ca.pem(CA证书)

  • client-cert.pem(客户端证书)

  • client-key.pem(客户端私钥)

ca.pemclient-cert.pem,client-key.pem文件稍后用于建立到服务器的加密连接。

可选地,还分发RSA公钥文件(public_key.pem).对于OpenSSL-compiledmysql类型进行身份验证的客户端sha256_password该文件用于通过未加密的连接与服务器进行基于RSA密钥对的密码交换。

文件在客户端主机或挂载分区上的位置在以后连接到服务器时是必需的。