ITPub博客

首页 > 数据库 > > 6.4 使用加密的连接

6.4 使用加密的连接

作者:飘絮絮絮丶 时间:2020-05-14 11:58:41 0 删除 编辑

参考官方文档:

dev.mysql.com/doc/refma


通过MySQL客户端和服务器之间的未加密连接,有权访问网络的人员可以监视所有流量并检查客户端和服务器之间发送或接收的数据。


当您必须以安全的方式通过网络传输信息时,未加密的连接是不可接受的。 要使任何类型的数据不可读,请使用加密。 加密算法必须包含安全元素以抵御多种已知的攻击,例如更改加密消息的顺序或重放数据



MySQL支持使用TLS(传输层安全性)协议的客户端和服务器之间的加密连接。 TLS有时被称为SSL(安全套接字层),但MySQL实际上并未将SSL协议用于加密连接,因为其加密功能较弱(请参见第6.4.6节“加密连接协议和密码”)。


TLS使用加密算法来确保通过公共网络接收的数据可以被信任。 它具有检测数据更改,丢失或重放的机制。 TLS还包含了使用X509标准提供身份验证的算法。



X509可以识别互联网上的某个人。 基本而言,应该有一个实体称为“证书颁发机构”(或CA),它将电子证书分配给需要它们的任何人。 证书依赖于具有两个加密密钥(公钥和秘密密钥)的非对称加密算法。 证书所有者可以将证书呈现给另一方作为身份证明。 证书由其所有者的公钥组成。 使用该公钥加密的任何数据只能使用由证书所有者持有的相应密钥进行解密。



MySQL可以编译为支持使用OpenSSL或yaSSL的加密连接。 有关这两个软件包的比较,请参见第6.4.4节“OpenSSL与yaSSL”有关每个软件包支持的加密协议和密码的信息,请参见第6.4.6节“加密连接协议和密码”。


默认情况下,如果服务器支持加密连接,则MySQL程序尝试使用加密进行连接,如果无法建立加密连接,则会退回到未加密连接。


MySQL在每个连接的基础上执行加密,并且对给定用户使用加密可以是可选的或强制的。 这使您可以根据各个应用程序的要求选择加密或未加密的连接。 有关如何要求用户使用加密连接的信息,请参见第13.7.1.2节“CREATE USER语法”中关于CREATE USER语句的REQUIRE子句的讨论。 另请参见第5.1.5节“服务器系统变量”中对require_secure_transport系统变量的描述。


被加密的连接可以被用在复制服务器的master和slave之间。


也可以使用SSH连接内的加密连接到MySQL服务器主机。


在MySQL 5.7中对加密连接支持进行了一些改进。 以下时间表总结了这些变化:



  • 5.7.3:在客户端,明确的--ssl选项不再是建议性的,而是规定性的。 如果启用支持加密连接的服务器,则客户端程序可以通过仅指定--ssl选项来要求加密连接。 (以前,客户端必须指定--ssl-ca选项或--ssl-ca,--ssl-key和--ssl-cert选项中的全部)。连接尝试失败 如果无法建立加密连接。 其他--ssl-xxx在客户端的选项是在缺少--ssl的情况下提供的:客户端尝试使用加密进行连接,但如果无法建立加密连接,则会回退到未加密的连接。




  • 5.7.5:默认情况下启用服务器端--ssl选项值。



对于使用OpenSSL编译的服务器,auto_generate_certs和sha256_password_auto_generate_rsa_keys系统变量可用于在启动时启用SSL / RSA证书和密钥文件的自动生成和自动发现。 对于证书和密钥自动搜索,如果启用--ssl并且未提供其他--ssl-xxx选项来明确配置加密连接,如果它在数据目录会发现必需的证书和密钥文件,则服务器会在启动时自动启用对加密连接的支持。



  • 5.7.6:mysql_ssl_rsa_setup实用程序可用于更轻松地手动生成SSL / RSA证书和密钥文件。 无论是使用OpenSSL还是使用yaSSL进行编译,启动时SSL / RSA文件的自动发现都会扩展应用于所有服务器。 (这意味着对于自动发现 auto_generate_certs不需要启用。)



如果服务器在启动时发现CA证书是自签名的,则会向错误日志写入警告。 (如果服务器自动创建证书,或手动使用mysql_ssl_rsa_setup,则证书是自签名的。)




  • 5.7.7:如果服务器支持加密连接,则C客户端库默认尝试建立加密连接。 这会影响客户程序,如下所示:
    • 如果没有--ssl选项,则客户端尝试使用加密进行连接,如果无法建立加密连接,则会回退到未加密的连接。
    • 显式--ssl选项或同义词(--ssl = 1,--enable-ssl)的存在是说明性的:客户端需要加密连接,如果无法建立,则会失败。
    • 使用--ssl = 0选项或同义词(--skip-ssl,--disable-ssl),客户端使用未加密的连接。




此更改还会影响基于C客户端库的后续版本的MySQL连接器:连接器/ C,连接器/ C ++和连接器/ ODBC。




  • 5.7.8 :require_secure_transport系统变量可用于控制到服务器的客户端连接是否必须使用某种形式的安全传输。
  • 5.7.10:TLS协议支持从TLSv1扩展到还包括TLSv1.1和TLSv1.2。 服务器端的tls_version系统变量和客户端的--tls-version选项使您可以选择支持级别。
  • 5.7.11 :MySQL客户端程序支持--ssl-mode选项,使您可以指定到服务器的连接的安全状态。 --ssl-mode选项包含客户端--ssl和--ssl-verify-server-cert选项的功能。 因此,不建议使用--ssl和--ssl-verify-server-cert,并在MySQL 8.0中将其删除。






6.4.1 配置MYSQL 使用加密的连接



有几个选项可用于指示是否使用加密连接,并指定适当的证书和密钥文件。 本节提供有关为加密连接配置服务器和客户端的一般指导:


加密连接的服务器端配置


在服务器端,--ssl选项指定服务器允许但不需要加密连接。 该选项默认启用。


服务器端的这些选项可识别服务器在允许客户端建立加密连接时使用的证书和密钥文件:


  • --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=server-key.pem



每个选项都以PEM格式命名文件。 如果您需要创建所需的证书和密钥文件,请参见第6.4.3节“创建SSL和RSA证书和密钥”。 或者,如果您拥有MySQL源代码发行版,则可以使用演示证书和密钥文件在其mysql-test/std_data目录中测试您的设置。


使用OpenSSL编译的MySQL服务器可以在启动时自动生成缺少的证书和密钥文件。


服务器执行证书和密钥文件自动发现。 如果未启用--ssl(可能与--ssl-cipher一起)以及其他--ssl-xxx选项未明确配置加密连接,则服务器会尝试在启动时自动启用对加密连接的支持:


  • 如果服务器在数据目录中发现名为ca.pem,server-cert.pem和server-key.pem的有效证书和密钥文件,它将启用客户端对加密连接的支持。 (这些文件不一定是自动生成的;重要的是它们具有指定的名称并且是有效的。)
  • 如果服务器在数据目录中找不到有效的证书和密钥文件,它将继续执行,但不支持加密连接。



如果服务器自动启用对加密连接的支持,则会向错误日志中写入注释。 如果服务器发现CA证书是自签名的,则会向错误日志写入警告。 (如果服务器自动创建证书,或手动使用mysql_ssl_rsa_setup,则证书是自签名的。)


服务器使用任何自动发现和使用的证书和密钥文件的名称来设置相应的系统变量(ssl_ca,ssl_cert,ssl_key)。



为了进一步控制客户端是否必须使用加密进行连接,请使用require_secure_transport系统变量; 请参见第5.1.5节“服务器系统变量”。 要明确指定允许的加密协议,请使用tls_version系统变量; 参见第6.4.6节“加密连接协议和密码”。




为加密连接的客户端配置


默认情况下,如果服务器支持加密连接,则MySQL客户端程序将尝试建立加密连接,并通过--ssl-mode选项提供进一步控制:


  • 如果没有--ssl-mode选项,则客户端尝试使用加密进行连接,如果无法建立加密连接,则会回退到未加密的连接。 这也是具有显式--ssl-mode = PREFFERED选项的行为。
  • 使用--ssl-mode = REQUIRED,客户端需要加密连接,如果无法建立,则会失败。
  • 通过--ssl-mode = DISABLED,客户端使用未加密的连接。
  • 使用--ssl-mode = VERIFY_CA或--ssl-mode = VERIFY_IDENTITY,客户端需要加密连接,并且还要针对服务器CA证书和(与VERIFY_IDENTITY)证书中的服务器主机名进行验证。



客户端上的以下选项标识客户端在建立与服务器的加密连接时使用的证书和密钥文件。 它们与服务器端使用的选项类似,但--ssl-cert和--ssl-key标识客户端的公钥和私钥:


  • --ssl-ca:证书颁发机构(CA)证书文件的路径名称。 该选项(如果使用)必须指定服务器使用的相同证书。 (--ssl-capath类似,但指定CA证书文件的目录的路径名称。)
  • --ssl-cert:客户端公钥证书文件的路径名。
  • --ssl-key:客户端 私钥文件的路径名。



相对于默认加密提供的安全性,客户端可以提供与服务器使用的证书相匹配的CA证书并启用主机名身份验证。 通过这种方式,服务器和客户端将他们的信任置于相同的CA证书中,并且客户端验证其连接的主机是否是预期的主机:


  • 要指定CA证书,请使用--ssl-ca(或--ssl-capath),并指定--ssl-mode = VERIFY_CA。
  • 要启用主机名身份验证,请使用--ssl-mode = VERIFY_IDENTITY,而不是--ssl-mode = VERIFY_CA。




注意:

主机名身份验证不适用于由服务器自动创建的自签名证书,或手动使用mysql_ssl_rsa_setup(请参见第6.4.3.1节“使用MySQL创建SSL和RSA证书和密钥”)。 这些自签名证书不包含作为通用名称值的服务器名称。


根据客户端使用的MySQL帐户的加密要求,可能需要客户端指定某些选项以使用加密连接到支持加密连接的MySQL服务器。



假设您要使用无特殊加密要求的帐户进行连接,或者使用包含REQUIRE SSL选项的CREATE USER语句创建该帐户。 假设服务器支持加密连接,则客户端可以使用不带-ssl-mode选项的加密连接或使用显式--ssl-mode = PREFFERED选项进行连接:


mysql

或:

mysql --ssl-mode=PREFERRED


对于使用REQUIRE SSL的帐户,如果无法建立加密连接,则连接尝试失败。 对于没有特殊加密要求的帐户,如果无法建立加密连接,则尝试回退到未加密连接。 如果无法获得加密连接,要防止回退并失败,请如下连接:


mysql --ssl-mode=REQUIRED



如果帐户有更严格的安全要求,则必须指定其他选项来建立加密连接:


  • 对于使用REQUIRE X509的帐户,客户必须至少指定--ssl-cert和--ssl-key。 另外,建议使用--ssl-ca(或--ssl-capath),以便验证服务器提供的公共证书。 例如:



mysql --ssl-ca=ca.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem



  • 对于具有REQUIRE ISSUER或REQUIRE SUBJECT的帐户,选项要求与REQUIRE X509相同,但证书必须分别与帐户定义中指定的问题或主题相匹配。



要防止使用加密并覆盖其他--ssl-xxx选项,请使用--ssl-mode = DISABLED调用客户端程序:

mysql --ssl-mode=DISABLED


要明确指定允许的加密协议,请使用--tls-version选项;小号


要确定当前与服务器的连接是否使用加密,请检查Ssl_cipher状态变量的值。 如果该值为空,则连接未加密。 否则,连接将被加密,并且该值指示加密密码。 例如:


mysql> SHOW SESSION STATUS LIKE 'Ssl_cipher'; +---------------+---------------------------+ | Variable_name | Value | +---------------+---------------------------+ | Ssl_cipher | DHE-RSA-AES128-GCM-SHA256 | +---------------+---------------------------+


对于mysql客户端,另一种方法是使用STATUS或\ s命令并检查SSL线路:


mysql> \s

...

SSL: Not in use

...


或:


mysql> \s

...

SSL: Cipher in use is DHE-RSA-AES128-GCM-SHA256

...

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69946831/viewspace-3152673/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-09-09

  • 博文量
    2646
  • 访问量
    42161