有几个配置参数可用于指示是否使用加密连接,以及指定适当的证书和密钥文件。本节提供了配置加密连接的服务器和客户端的一般指导:
加密连接也可以在其他上下文中使用,详见以下附加部分:
在源服务器和副本服务器之间。看到第16.3.8节“设置复制以使用加密连接”.
组复制服务器之间。看到第17.6.2节“组复制安全套接字层(SSL)支持”.
通过基于MySQL C API的客户端程序。看到支持加密连接.
有关创建所需证书和密钥文件的说明可在第6.3.3节“创建SSL和RSA证书和密钥”.
在服务器端——ssl
选项指定服务器允许但不要求加密连接。默认情况下该选项是启用的,因此不需要显式指定它。
若要要求客户端使用加密连接进行连接,请启用require_secure_transport
系统变量。看到配置加密连接为必选项.
服务器端的这些系统变量指定了当允许客户端建立加密连接时服务器使用的证书和密钥文件:
ssl_ca
: CA证书文件的路径名称。(ssl_capath
类似,但指定CA证书文件目录的路径名称。)ssl_cert
:服务器公钥证书文件的路径名称。可以将该证书发送到客户机,并根据它所拥有的CA证书进行身份验证。ssl_key
:服务器私钥文件的路径名称。
例如,要启用加密连接的服务器,请使用my.cnf
文件,根据需要更改文件名:
(mysqld) ssl_ca = ca。pem ssl_cert = server-cert。pem ssl_key =服务器密钥。pem
若要指定要求客户端使用加密连接,请启用require_secure_transport
系统变量:
(mysqld) ssl_ca = ca。pem ssl_cert = server-cert。pem ssl_key =服务器密钥。pem require_secure_transport =对
每个证书和密钥系统变量以PEM格式命名一个文件。您是否需要创建所需的证书和密钥文件,请参见第6.3.3节“创建SSL和RSA证书和密钥”.使用OpenSSL编译的MySQL服务器可以在启动时自动生成丢失的证书和密钥文件。看到第6.3.3.1节“使用MySQL创建SSL和RSA证书和密钥”.或者,如果您有一个MySQL源发行版,您可以使用演示证书和其中的密钥文件来测试您的设置mysql-test / std_data
目录中。
服务器自动发现证书和密钥文件。如果没有给出除。以外的显式加密连接选项——ssl
(可能还有ssl_cipher
)来配置加密连接,服务器会尝试在启动时自动启用加密连接支持:
如果服务器发现有效的证书和密钥文件命名为
ca.pem
,server-cert.pem
,server-key.pem
在data目录中,它支持客户端加密连接。(文件不必是自动生成的;重要的是它们有这些名称并且是有效的。)如果服务器在数据目录中没有找到有效的证书和密钥文件,它将继续执行,但不支持加密连接。
如果服务器自动启用加密连接支持,它将向错误日志写入一个注释。如果服务器发现CA证书是自签名的,它将向错误日志写入警告。证书是自签名的,如果是由服务器自动创建或手动使用mysql_ssl_rsa_setup.)
MySQL还为服务器端加密连接控制提供了以下系统变量:
ssl_cipher
:用于连接加密的允许密码列表。ssl_crl
:包含证书吊销列表的文件路径名称。(ssl_crlpath
类似,但指定证书撤销列表文件目录的路径名。)tls_version
:服务器允许哪种加密协议进行加密连接;看到第6.3.2节“加密连接TLS协议和密码”.例如,您可以配置tls_version
防止客户端使用不安全的协议。
有关与建立加密连接相关的客户端选项的完整列表,请参见加密连接的命令选项.
默认情况下,如果服务器支持加密连接,MySQL客户端程序会尝试建立加密连接,并通过——ssl-mode
选择:
在没有
——ssl-mode
选项,客户端尝试使用加密连接,如果无法建立加密连接,则退回到未加密连接。这也是带有显式的行为——ssl-mode =球迷们
选择。与
——ssl-mode =要求
,客户端需要加密连接,如果无法建立连接则失败。与
——ssl-mode =禁用
,客户端使用未加密连接。与
——ssl-mode = VERIFY_CA
或——ssl-mode = VERIFY_IDENTITY
,客户端需要加密连接,并对服务器CA证书执行验证VERIFY_IDENTITY
)对应其证书中的服务器主机名。
,则建立未加密连接的尝试失败require_secure_transport
在服务器端启用系统变量,导致服务器需要加密连接。看到配置加密连接为必选项.
客户端上的下列选项标识客户端在建立到服务器的加密连接时使用的证书和密钥文件。它们类似于ssl_ca
,ssl_cert
,ssl_key
服务器端使用的系统变量,但是——ssl-cert
而且——ssl密钥
识别客户端公钥和私钥:
——ssl-ca
: CA证书文件的路径名称。如果使用此选项,则必须指定服务器使用的相同证书。(——ssl-capath
类似,但指定CA证书文件目录的路径名称。)——ssl-cert
:客户端公钥证书文件的路径名称。——ssl密钥
:客户端私钥文件的路径名称。
对于相对于默认加密提供的额外安全性,客户端可以提供与服务器使用的证书匹配的CA证书,并启用主机名身份验证。通过这种方式,服务器和客户端将它们的信任放在同一个CA证书中,客户端验证它连接到的主机是否为预期的主机:
要指定CA证书,请使用
——ssl-ca
(或——ssl-capath
),并指定——ssl-mode = VERIFY_CA
.要启用主机名身份验证,请使用
——ssl-mode = VERIFY_IDENTITY
而不是——ssl-mode = VERIFY_CA
.
主机名身份验证VERIFY_IDENTITY
不能使用由服务器自动创建或手动创建的自签名证书mysql_ssl_rsa_setup(见第6.3.3.1节“使用MySQL创建SSL和RSA证书和密钥”).这种自签名证书不包含作为Common name值的服务器名。
在MySQL 5.7.23之前,主机名身份验证也不能用于使用通配符指定Common name的证书,因为该名称是与服务器名称一字不差地比较的。
MySQL还为客户端加密连接控制提供了以下选项:
——ssl cipher
:用于连接加密的允许密码列表。——ssl-crl
:包含证书吊销列表的文件路径名称。(——ssl-crlpath
类似,但指定证书撤销列表文件目录的路径名。)——tls版本
:允许使用的加密协议;看到第6.3.2节“加密连接TLS协议和密码”.
根据客户端使用的MySQL帐户的加密要求,客户端可能需要指定某些选项来使用加密连接到MySQL服务器。
假设您希望使用一个没有特殊加密要求的帐户进行连接,或者使用创建用户
声明中包含需要SSL
条款。假设服务器支持加密连接,客户机可以使用加密连接——ssl-mode
选项或带有显式的——ssl-mode =球迷们
选择:
mysql
或者:
mysql——ssl-mode =优先
创建的帐户需要SSL
子句,如果无法建立加密连接,则连接尝试失败。对于没有特殊加密要求的帐户,如果无法建立加密连接,则尝试退回到未加密连接。为了防止回退并在无法获得加密连接时失败,请像这样连接:
mysql——ssl-mode =
如果帐户有更严格的安全要求,则必须指定其他选项以建立加密连接:
创建的帐户
需要X509
子句,客户端必须至少指定——ssl-cert
而且——ssl密钥
.此外,——ssl-ca
(或——ssl-capath
),以便验证服务器提供的公共证书。例如(在单行中输入命令):mysql——ssl-ca = ca。pem - ssl-cert = client-cert。pem - ssl密钥= client-key.pem
创建的帐户
要求发行人
或要求主题
子句时,加密要求与for相同需要X509
,但证书必须分别与帐户定义中指定的问题或主题相匹配。
有关的更多信息需要
条款,请参阅第13.7.1.2节,“CREATE USER语句”.
防止使用加密和覆盖其他——ssl
选项,调用客户机程序xxx
——ssl-mode =禁用
:
mysql——ssl-mode =禁用
文件的会话值,以确定当前与服务器的连接是否使用加密Ssl_cipher
状态变量。如果该值为空,则表示未加密连接。否则表示加密连接,取值为加密密码。例如:
显示会话状态为Ssl_cipher;+---------------+---------------------------+ | Variable_name |值 | +---------------+---------------------------+ | Ssl_cipher | DHE-RSA-AES128-GCM-SHA256 | +---------------+---------------------------+
为mysql客户端,另一种选择是使用状态
或\ s
命令并检查SSL
线:
mysql > \ s…SSL:未使用…
或者:
mysql > \ s…SSL: Cipher in use is DHE-RSA-AES128-GCM-SHA256…
对于某些MySQL部署来说,使用加密连接可能不仅是必要的,而且是必须的(例如,为了满足法规要求)。本节讨论使您能够做到这一点的配置设置。以下是控制级别:
您可以将服务器配置为要求客户端使用加密连接进行连接。
您可以调用各个客户机程序来要求加密连接,即使服务器允许但不要求加密。
您可以将单个MySQL帐户配置为只能在加密连接上使用。
若要要求客户端使用加密连接进行连接,请启用require_secure_transport
系统变量。例如,将这些行放在服务器中my.cnf
文件:
(mysqld) require_secure_transport =
与require_secure_transport
如果启用了,则客户机到服务器的连接需要使用某种形式的安全传输,并且服务器只允许使用SSL的TCP/IP连接,或者使用套接字文件(在Unix上)或共享内存(在Windows上)的连接。服务器拒绝不安全的连接尝试ER_SECURE_TRANSPORT_REQUIRED
错误。
若要调用客户端程序,使其需要加密连接,无论服务器是否需要加密,请使用——ssl-mode
期权的价值要求
,VERIFY_CA
,或VERIFY_IDENTITY
.例如:
mysql——ssl-mode=REQUIRED mysqldump——ssl-mode=VERIFY_CA mysqladmin——ssl-mode=VERIFY_IDENTITY
要将MySQL帐户配置为只能在加密连接上使用,需要包含需要
条款的创建用户
语句,创建帐户,并在该子句中指定所需的加密特征。例如,要要求加密连接并使用有效的X.509证书,请使用需要X509
:
CREATE USER 'jeffrey'@'localhost'
有关的更多信息需要
条款,请参阅第13.7.1.2节,“CREATE USER语句”.
若要修改没有加密要求的现有帐户,请使用改变用户
声明。